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"));
} |
- 我最终在Spring启动之前(在我调用SpringApplication.run()之前)检查了命令行参数,但是我猜这是一种更惯用的方式。
正如安迪先前在答复中所述,可以评估属性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 |
-
我认为这行不通,因为--debug选项是Spring处理的特殊标志。我不能以其他方式使用它。
-
@AdamArold先生,感谢您的反馈。但是--debug选项仅在spring-boot中可用,而在spring中不可用。
-
这就是为什么我用这个标记了我的问题。
-
@AdamArold先生,对不起,我看不清标题。但是您可以更改调试的其他名称,例如dev。对于选项debug!,您需要将表达式更改为systemProperties['debug!'] != null。
恐怕无法以这种方式获得调试模式。
Spring在此处查找任何属性值,但--debug不是属性的一部分。
调试检测可能是特定于供应商的。 (有关调试检测的更多信息,请参阅确定Eclipse中的Java应用程序是否处于调试模式。)。