Как узнать, работает ли приложение загрузки Spring в режиме отладки?

Я хотел бы изменить, как работает мое приложение, в зависимости от того, присутствует или нет переключатель --debug . Я попробовал это в файле @Configuration :

 @Value("\${debug}") lateinit var debug: String 

но Весна говорит

Не удалось разрешить «отлаживать» замещающего «значение» $ {debug}

Как я могу запросить состояние опции --debug ?

Наиболее надежным способом проверки режима отладки является запрос Environment . Это позволит вам обнаружить, что режим включен, было ли это сделано с помощью аргумента командной строки ( --debug ), системного свойства ( -Ddebug ), переменной окружения ( DEBUG=true ) и т. Д.

Вы можете ввести экземпляр Environment как и любую другую зависимость, или вы можете реализовать EnvironmentAware . Метод getProperty(String) затем может быть использован для получения значения свойства debug . Spring Boot рассматривает debug как включаемый, если свойство debug имеет ненулевое значение, отличное от false :

 private boolean isSet(ConfigurableEnvironment environment, String property) { String value = environment.getProperty(property); return (value != null && !value.equals("false")); } 

Я боюсь, что такой режим отладки невозможно.

Spring ищет любые значения свойств здесь, но --debug не является частью свойства.

Обнаружение отладки может быть специфичным для поставщика. (см. Определение, если приложение java находится в режиме отладки в Eclipse для получения дополнительной информации об обнаружении отладки).

самый простой способ – debug опции для системного свойства, например:

 java -Ddebug Application 

то вы можете аннотировать свойство следующим образом:

 @Value("#{systemProperties.debug != null}") var debug: Boolean = false; // ^--- using a default value to avoiding NPException