首页 > 解决方案 > 覆盖 Spring Boot 配置不起作用

问题描述

我正在尝试将所有敏感数据(例如机密和密码)从本地应用程序属性文件移动到 AWS Secrets Manager。该应用程序基于 Spring Boot。该计划是在应用程序启动之前从 AWS 检索所有机密,然后覆盖当前值。问题是,application.properties 中的属性不会被覆盖。我尝试将值放入 system.configuration 或添加新属性,一切正常。但是,当您尝试获得这样的价值时:

        String b = environment.getProperty("test.key");

或这个:

        <property name="userName" value="${test.username}"/>

它仍然直接从应用程序文件中获取值。

尝试了这篇文章中提到的所有方法,仍然没有运气。所有这些都只是将值添加到新的属性源,而不是覆盖从application.properties文件加载的环境值。有什么想法吗?这真的很难。

标签: springspring-bootconfiguration

解决方案


在这篇文章中找到了答案。感谢@Lukas Hinsch。只需通过ApplicationEnvironmentPreparedEventwill do 将新的属性源添加到应用程序环境即可。第一次对我不起作用的原因是ApplicationEnvironmentPreparedEvent由于我添加它的方式而没有执行application.addListeners();,您应该将其添加为new SpringApplicationBuilder(Application.class).listeners(new Applicationpdater()).run(args);


推荐阅读