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

时间:2015-08-25 05:51:54

标签: spring spring-boot

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

  1. 我是否可以拥有特定于环境的属性文件,例如应用程序 - $ {env-value} .properties?
  2. 在上述情况下,env-value的值为local / devl / test / prod

    1. 在哪里设置env-value文件?对于local,我可以通过sts

    2. 将其设置为jvm参数
    3. 谁在Spring Boot应用程序中读取application.properties。

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

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

3 个答案:

答案 0 :(得分:19)

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

使用

对您的配置进行配置
@PropertySource("application-${spring.profiles.active}.properties")

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

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

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

-Dspring.active.profiles=test

在此示例中,name将替换为application-test-properties,依此类推。

答案 1 :(得分:5)

我们可以这样做:

application.yml 中的

spring:
  profiles:
    active: test //modify here to switch between environments
    include:  application-${spring.profiles.active}.yml
application-test.yml 中的

server:
  port: 5000

application-local.yml

server:
  address: 0.0.0.0
  port: 8080

然后春季启动将按我们的意愿启动我们的应用程序。

答案 2 :(得分:0)

我的观点,以这种不公平的方式要求开发人员一次性创建所有相关的环境,从而有可能将生产配置暴露给最终开发人员

根据12要素,不应仅针对环境而居住于环境中。

我们如何制作CI CD

  • 一次构建Spring 并升级到另一个环境,在这种情况下,如果我们的spring jar具有所有环境,那么它将带来安全风险,因为GIT中的所有环境都是变量