【发布时间】:2017-11-21 15:07:01
【问题描述】:
我想根据--debug 开关是否存在来修改我的应用程序的工作方式。我在我的@Configuration 文件中试过这个:
@Value("\${debug}")
lateinit var debug: String
但是春天说
无法解析值“${debug}”中的占位符“调试”
如何查询--debug选项的状态?
【问题讨论】:
标签: java spring spring-boot kotlin
我想根据--debug 开关是否存在来修改我的应用程序的工作方式。我在我的@Configuration 文件中试过这个:
@Value("\${debug}")
lateinit var debug: String
但是春天说
无法解析值“${debug}”中的占位符“调试”
如何查询--debug选项的状态?
【问题讨论】:
标签: java spring spring-boot kotlin
检查调试模式最可靠的方法是查询Environment。这将允许您检测是否已通过命令行参数 (--debug)、系统属性 (-Ddebug)、环境变量 (DEBUG=true) 等方式启用了该模式。
您可以像注入任何其他依赖项一样注入Environment 的实例,也可以实现EnvironmentAware。然后可以使用getProperty(String) 方法检索debug 属性的值。如果debug 属性具有除false 以外的非空值,则Spring Boot 将debug 视为已启用:
private boolean isSet(ConfigurableEnvironment environment, String property) {
String value = environment.getProperty(property);
return (value != null && !value.equals("false"));
}
【讨论】:
SpringApplication.run() 之前),但我猜这是一种更惯用的方式。
这种方式恐怕无法获得调试模式。
Spring 在此处查找任何属性值,但 --debug 不是属性的一部分。
调试检测可能是特定于供应商的。 (有关调试检测的更多信息,请参阅Determine if a java application is in debug mode in Eclipse)。
【讨论】:
最简单的方法是将debug选项添加到系统属性中,例如:
java -Ddebug Application
然后您可以将属性注释如下:
@Value("#{systemProperties.debug != null}")
var debug: Boolean = false;
// ^--- using a default value to avoiding NPException
【讨论】:
--debug 选项是 Spring 处理的特殊标志。我不能以其他方式使用它。
--debug 选项仅适用于spring-boot 而不是spring。
dev。对于选项debug!,您需要将表达式更改为systemProperties['debug!'] != null。
正如之前在the reply by Andy 中提到的,可以评估属性debug,但是您需要从Environment 执行此操作。
当我想激活一个组件时,我遇到了同样的问题,只是在“调试模式”下。您可以通过使用@ConditionalOnProperty("debug") 来实现这一点,它确实从Environment 获取信息,因此可以与--debug、-Ddebug、...
【讨论】: