我有一个spring boot应用程序,它有多个属性文件,每个环境本地,开发,测试,性能,生产一个。
最近我们发生了一个事件,有人忘记将新的属性条目放入生产属性文件中,系统在生产中停机了几个小时。
我的问题是,有关如何跨多个属性文件维护属性的更好的做法吗?
我现在正在考虑一个实用程序,可能是一个验证的单元测试 每个属性文件中都存在每个键,如果构建它将失败 它不存在。
我做了一些搜索,但实际上找不到多少。我理解SO问题条款,我在这里寻求意见。我更希望了解维护属性文件的更好实践。
答案 0 :(得分:3)
您应该为不同的环境使用不同的属性文件。比如
QA环境的application-qa.properties
生产环境的application-prod.properties
本地环境application-local.properties
然后使用多个脚本为不同的环境启动应用程序,例如每个shell脚本都包含
mvn spring-boot:run -Drun.profiles = qa
mvn spring-boot:run -Drun.profiles = prod
mvn spring-boot:run -Drun.profiles = local
例如 application-local.properties 文件是:
spring.profiles.active =本地
spring.data.mongodb.host =本地主机
spring.data.mongodb.port = 27017
spring.data.mongodb.database = my_db_name
spring.data.mongodb.username = some_user_name
spring.data.mongodb.password = some_password
spring.rabbitmq.host =本地主机
spring.rabbitmq.username =客
spring.rabbitmq.password =客
spring.rabbitmq.port = 5672
rabbitmq.publish =真
答案 1 :(得分:1)
是的,接下来的标准做法是分离依赖于环境的属性,并使用spring.profile.active注入它们,但是您描述的场景似乎更多是人为错误,并且可能出现任何实用程序,可以有测试以验证属性,但它引入了可维护性问题。我更喜欢使用spring cloud config(here)来管理与生产相关的属性,因为生产属性可能包含db凭据和可能泄露的密钥。
答案 2 :(得分:1)
您可以使用默认属性文件。如果特定env特定文件中没有属性,则它将查看此属性文件。
尽可能在spring中解析属性时尝试提供默认值。 例如。 @value(" $ {mongodb.url:127.0.0.1}&#34)