在Spring Boot应用程序中维护多个属性文件

时间:2017-08-10 08:07:46

标签: java spring-boot properties

我有一个spring boot应用程序,它有多个属性文件,每个环境本地,开发,测试,性能,生产一个。

最近我们发生了一个事件,有人忘记将新的属性条目放入生产属性文件中,系统在生产中停机了几个小时。

我的问题是,有关如何跨多个属性文件维护属性的更好的做法吗?

  

我现在正在考虑一个实用程序,可能是一个验证的单元测试   每个属性文件中都存在每个键,如果构建它将失败   它不存在。

我做了一些搜索,但实际上找不到多少。我理解SO问题条款,我在这里寻求意见。我更希望了解维护属性文件的更好实践。

3 个答案:

答案 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)