Spring引导应用程序中特定于环境的application.properties文件
在我的Spring启动应用程序中,我想创建特定于环境的属性文件。war中我的应用程序的打包类型,我正在嵌入式tomcat中执行它。我使用sts并从sts本身执行mainSpring引导应用程序中特定于环境的application.properties文件,spring,spring-boot,Spring,Spring Boot,在我的Spring启动应用程序中,我想创建特定于环境的属性文件。war中我的应用程序的打包类型,我正在嵌入式tomcat中执行它。我使用sts并从sts本身执行main 我可以拥有环境特定的属性文件,比如application-${env value}.properties吗 在上述情况下,env值的值为local/devl/test/prod 在何处设置环境值文件?对于local,我可以通过sts将其设置为jvm参数 谁读取Spring Boot应用程序中的application.proper
应用程序-[profile].properties
文件,并使用spring.profiles.active
属性指定要使用的配置文件
-Dspring.profiles.active=local
这将加载
应用程序.properties
和应用程序local.properties
,后者将覆盖第一个应用程序的属性。可以。由于您使用的是spring,请查看@PropertySource
Anotion
使用
@PropertySource("application-${spring.profiles.active}.properties")
您可以随意调用它,如果愿意,还可以添加多个属性文件。如果您有更多属于所有环境的集合和/或默认值(也可以使用@PropertySource{…,…,…}编写),这会很好
然后,您可以使用环境启动应用程序
-Dspring.active.profiles=test
在本例中,名称将替换为应用程序测试属性等。我们可以这样做:
在application.yml中:
在application-test.yml中:
在application-local.yml中:
然后,spring boot将按我们的意愿启动我们的应用程序。我的观点是,这并不是要求开发人员一次性创建所有相关环境,这会导致将生产配置暴露给最终开发人员的风险 根据12个因素,不应是特定于环境的,只应居住在环境中 我们如何处理CI CD
- 一次性建造弹簧 然后升级到另一个环境,在这种情况下,如果SpringJAR拥有所有的环境,那么它将面临安全风险,在GIT中拥有所有的环境变量
spring.active.profiles
,因此无法选择此值,因此请使用-dsspring.active.profiles=local
。相反,没有成功,先生。因此,我现在使用的不是-Dprofile,而是-Dspring.active.profiles=local。然后在我的配置文件中,我尝试获取值字符串driverClassName=env.getProperty(“driverClassName”);env是springSorry my bad的环境,混合了以下内容:)。我们是否可以在不同时加载应用程序属性和特定配置文件的情况下,用另一个文件覆盖应用程序属性的使用?例如,对于测试或开发?M.Deinum,我也有类似的问题,我有application.yml和application-qa.yml,我给出了-Dspring.profiles.active=qa,这两个文件都被读取,但是application-qa.yml中的属性没有覆盖application.yml中的属性,我总是只看到application.yml中的属性?有没有办法指定优先级?嗨,两者都可以,这可以解决你的问题。示例:我正在为aws lambda编写代码,可以将这个key=value作为环境值传递-可以使用System.getenv()访问-它可以工作吗?我有4个应用程序-{profile}.properties文件。我想在不同的环境中运行相同的jar文件,比如dev、test、prod。所以我不能使用-Dspring.profiles.active=local。如果我遗漏了什么,请更正。问题是$spring.profiles.active}
是一个数组/逗号分隔的字符串。因此,当有多个配置文件处于活动状态时,它可能不会执行您期望/希望它执行的操作。这是真的,但对于两个配置文件来说效果很好—一个是默认配置文件,另一个是使用PropertySource定义的配置文件。对于更高级的物业处理,我认为您将不得不在Spring之外寻找。此外,PropertySource仅在启动期间读取。其他用于属性处理的更高级的库也可以在运行时更改属性。这很有效,但我仍然不明白为什么我必须手动执行此操作。在我的另一个存储库中,我不必这样做。您不是这样硬编码活动配置文件吗??:(
-Dspring.active.profiles=test
spring:
profiles:
active: test //modify here to switch between environments
include: application-${spring.profiles.active}.yml
server:
port: 5000
server:
address: 0.0.0.0
port: 8080