如何判断我的Spring启动应用程序是否处于调试模式?

时间:2017-06-19 11:53:29

标签: java spring spring-boot kotlin

我想根据--debug开关是否存在来修改我的应用程序的工作方式。我在我的@Configuration文件中尝试了这个:

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

但是春天说

  

无法在值“$ {debug}”

中解析占位符'debug'

如何查询--debug选项的状态?

4 个答案:

答案 0 :(得分:7)

检查调试模式最有效的方法是查询Environment。这将允许您检测模式是否已启用,无论是通过命令行参数(--debug),系统属性(-Ddebug),环境变量(DEBUG=true)等完成的。

您可以像其他任何依赖项一样注入Environment的实例,也可以实现EnvironmentAware。然后可以使用getProperty(String)方法检索debug属性的值。如果debug属性具有debug以外的非空值,则Spring Boot会将false视为已启用:

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

答案 1 :(得分:0)

我担心不可能以这种方式获得调试模式。

Spring在这里查找任何属性值,但--debug不属于属性。

调试检测可能是特定于供应商的。 (有关调试检测的详细信息,请参阅Determine if a java application is in debug mode in Eclipse。)

答案 2 :(得分:0)

最简单的方法是使debug选项成为系统属性,例如:

java -Ddebug Application

然后您可以按如下方式注释该属性:

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

答案 3 :(得分:0)

如之前在the reply by Andy中所述,可以评估属性debug,但是您需要从Environment开始计算。

我想以“调试模式”激活组件时遇到相同的问题。您可以使用@ConditionalOnProperty("debug")来实现,它确实从Environment获取信息,因此可以与--debug-Ddebug,…

一起使用