Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring引导应用程序中特定于环境的application.properties文件_Spring_Spring Boot - Fatal编程技术网

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

Spring引导应用程序中特定于环境的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

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

  • 我可以拥有环境特定的属性文件,比如application-${env value}.properties吗
  • 在上述情况下,env值的值为local/devl/test/prod

  • 在何处设置环境值文件?对于local,我可以通过sts将其设置为jvm参数

  • 谁读取Spring Boot应用程序中的application.properties

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

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

  • 基于属性的Spring引导已经存在

    只需添加一个
    应用程序-[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中拥有所有的环境变量

    你读过吗?它基本上是开箱即用的,我做了,但那不起作用。所以我在同一位置有application.properties文件和application-local.properties文件。application-local.properties文件包含与数据库相关的属性。application.properties中有一个关于SpringMVC的属性。此外,我还添加了-Dprofile=local作为调试配置,但由于您需要设置
    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