在 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 的更多信息。