在 Spring 属性 无效时提供更好的日志记录
To provide nicer logging when a Spring property is invalid
使用 application.properties 文件我的 Spring 引导应用程序可以使用其中的一些 属性 值。确保强制值必须存在的一种方法是为 属性 添加注释 @Value
。问题在于,如果 属性 值不在属性文件中,应用程序将严重失败。
我想用一种更好的不那么可怕的方式来打印关于 "Property A is missing" 的日志行,而不是整个堆栈跟踪。有没有办法在仍然使用 @Value
初始化属性的同时做到这一点?例如,属性 A 是强制性的,在应用程序退出之前记录错误; 属性 B 缺失但不是必需的,会记录警告并继续应用程序。
如果你能识别所有属性,那么你可以在Applicationclass中用@Postconstruct写一个方法,在你的方法里面,你可以手动验证并记录它们
@Autowired
private Environment environment;
@PostConstruct
private void validateProperties() {
environment.getProperty(key);
.....
......
}
或者,您可以编写自定义 EnvironmentPostProcessor,并迭代所有属性并记录 null/empty。
当您使用 spring-boot 时,请考虑创建 @ConfigurationProperties
class 而不是使用 @Value
注释。
通过这样做,您可以使用 Bean Validation 进行验证,同样在同一个 class 中,您可以实现接口 InitializingBean
并添加额外的 validations/log 消息作为你与.
Follow this link 在 Spring 的官方文档上阅读有关 @ConfigurationProperties
的更多信息。
使用 application.properties 文件我的 Spring 引导应用程序可以使用其中的一些 属性 值。确保强制值必须存在的一种方法是为 属性 添加注释 @Value
。问题在于,如果 属性 值不在属性文件中,应用程序将严重失败。
我想用一种更好的不那么可怕的方式来打印关于 "Property A is missing" 的日志行,而不是整个堆栈跟踪。有没有办法在仍然使用 @Value
初始化属性的同时做到这一点?例如,属性 A 是强制性的,在应用程序退出之前记录错误; 属性 B 缺失但不是必需的,会记录警告并继续应用程序。
如果你能识别所有属性,那么你可以在Applicationclass中用@Postconstruct写一个方法,在你的方法里面,你可以手动验证并记录它们
@Autowired
private Environment environment;
@PostConstruct
private void validateProperties() {
environment.getProperty(key);
.....
......
}
或者,您可以编写自定义 EnvironmentPostProcessor,并迭代所有属性并记录 null/empty。
当您使用 spring-boot 时,请考虑创建 @ConfigurationProperties
class 而不是使用 @Value
注释。
通过这样做,您可以使用 Bean Validation 进行验证,同样在同一个 class 中,您可以实现接口 InitializingBean
并添加额外的 validations/log 消息作为你与.
Follow this link 在 Spring 的官方文档上阅读有关 @ConfigurationProperties
的更多信息。