Spring Boot应用程序中的环境特定application.properties文件

use*_*483 63 spring spring-boot

在我的Spring Boot应用程序中,我想创建特定于环境的属性文件.战争中我的应用程序的打包类型,我在嵌入式tomcat中执行它.我使用sts并从sts本身执行main.

  1. 我可以拥有像应用程序一样的特定于环境的属性文件 - $ {env-value} .properties?

在上面的例子中,env-value的值为local/devl/test/prod

  1. 在哪里设置env值文件?对于local,我可以通过sts将其设置为jvm参数

  2. 谁在S​​pring Boot应用程序中读取application.properties.

  3. 如何加载特定于环境的属性文件?对于ex - 如果我在环境特定属性文件中设置数据库uid,pwd,schema等,那么数据源是否能够理解其中的属性?

  4. 我可以同时使用application.properties和application-local.properties文件吗?

M. *_*num 131

Spring Boot已经支持基于配置文件的属性.

只需添加application-[profile].properties文件并指定要使用该spring.profiles.active属性使用的配置文件.

-Dspring.profiles.active=local
Run Code Online (Sandbox Code Playgroud)

这将加载application.propertiesapplication-local.properties后者的第一个覆盖属性.

  • 大家好,这可以解决你的问题.https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-profile-specific-properties示例:https:/ /www.mkyong.com/spring-boot/spring-boot-profile-based-properties-and-yaml-example/ (5认同)
  • 我们是否可以使用特定配置文件的另一个文件覆盖应用程序属性的使用,而不加载这两个文件?例如用于测试或开发? (3认同)
  • M. Deinum,我也有类似的问题,我有 application.yml 和 application-qa.yml 并且我给出了 -Dspring.profiles.active=qa,这两个文件都被读取,但 application-qa.yml 的属性不会覆盖来自 application.yml 的属性,我总是只看到来自 application.yml 的属性?有什么办法可以指定优先级吗? (2认同)

Tze*_*zen 20

是的你可以.由于您使用的是spring,请查看@PropertySource anotation.

用你的配置来配置你的配置

@PropertySource("application-${spring.profiles.active}.properties")
Run Code Online (Sandbox Code Playgroud)

您可以随意调用它,如果您愿意,也可以添加多个属性文件.如果您有更多属于所有环境的集合和/或默认值(可以使用@PropertySource {...,...,...}编写),那就太好了.

@PropertySources({
  @PropertySource("application-${spring.profiles.active}.properties"),
  @PropertySource("my-special-${spring.profiles.active}.properties"),
  @PropertySource("overridden.properties")})
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用环境启动应用程序

-Dspring.active.profiles=test
Run Code Online (Sandbox Code Playgroud)

在此示例中,name将替换为application-test-properties等.

  • 问题是 `$spring.profiles.active}` 是一个数组/逗号分隔的字符串。因此,当有多个配置文件处于活动状态时,它可能不会执行您期望/希望它执行的操作。 (3认同)
  • 这有效,但我仍然不明白为什么我必须手动执行此操作。在我的其他存储库之一中,我不必这样做。 (2认同)

小智 7

我们可以这样:

application.yml中

spring:
  profiles:
    active: test //modify here to switch between environments
    include:  application-${spring.profiles.active}.yml
Run Code Online (Sandbox Code Playgroud)

application-test.yml中

server:
  port: 5000
Run Code Online (Sandbox Code Playgroud)

并在application-local.yml中

server:
  address: 0.0.0.0
  port: 8080
Run Code Online (Sandbox Code Playgroud)

然后Spring Boot将按照我们的意愿启动我们的应用程序。

  • 您不是以这种方式对活动配置文件进行硬编码吗?:( (2认同)