关于java:如何判断我的Spring Boot应用程序是否处于调试模式?

How can I tell whether my Spring boot application is in debug mode?

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

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

但是Spring说

Could not resolve placeholder 'debug' in value"${debug}"

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


检查调试模式的最可靠方法是查询Environment。这将使您能够检测是否已通过命令行参数(--debug),系统属性(-Ddebug),环境变量(DEBUG=true)等启用了该模式。 >

您可以像插入任何其他依赖项一样注入Environment的实例,也可以实现EnvironmentAware。然后,可以使用getProperty(String)方法检索debug属性的值。如果debug属性具有除false

以外的非空值,则Spring Boot将debug视为已启用

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


正如安迪先前在答复中所述,可以评估属性debug,但是您需要从Environment

执行此操作。

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

一起使用


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

1
java -Ddebug Application

然后您可以如下注释属性:

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


恐怕无法以这种方式获得调试模式。

Spring在此处查找任何属性值,但--debug不是属性的一部分。

调试检测可能是特定于供应商的。 (有关调试检测的更多信息,请参阅确定Eclipse中的Java应用程序是否处于调试模式。)。