如何基于活动配置文件访问application- {profile} .properties文件

时间:2019-07-04 13:03:00

标签: java spring-boot spring-profiles spring-properties

我需要在项目位置之外访问application.properties文件。我可以使用以下命令实现相同的目的:

import boto3
from aws_xray_sdk.core import xray_recorder
from aws_xray_sdk.core import patch

patch(['boto3'])

@xray_recorder.capture("handler")

def handler(event,context):
  client = boto3.client('<service here>')

现在,我想使用主动配置文件实现相同的目的。如果开发人员配置文件处于活动状态,则需要获取application-dev.properties,如果阶段配置文件处于活动状态,则需要获取application-stage.properties,依此类推。

  

我在Spring Boot 1.5.x上使用Windows平台和JAVA 8

我尝试在application.properties文件中设置活动配置文件。但这不起作用

@Component
@PropertySources({
        @PropertySource(value = "file:${user.home}/file/path/application.properties", ignoreResourceNotFound = false) })
public class PropConfig implements InitializingBean {

3 个答案:

答案 0 :(得分:7)

Spring Boot 1.5.X的解决方案

您可以通过使用以下JVM参数运行应用程序来将文件夹添加为自定义配置位置:

-Dspring.config.location=file:${user.home}/file/path/

配置了此JVM参数后,该文件夹内的所有application-{profile}.properties文件将被自动解析。

(或者,如果您更喜欢使用环境变量而不是JVM参数,则可以通过设置SPRING_CONFIG_LOCATION环境变量来执行相同的操作,例如通过在Linux终端中使用以下命令:export SPRING_CONFIG_LOCATION=file:${user.home}/file/path/

现在,如果您的自定义配置文件夹中有文件application-dev.properties,则只需添加以下内容即可激活默认application.properties文件中的配置文件:

spring.profiles.active=dev

最后,@PropertySources注释是多余的,您可以将其删除:

@Component
public class PropConfig implements InitializingBean {

参考:https://docs.spring.io/spring-boot/docs/1.5.0.RELEASE/reference/html/boot-features-external-config.html


Spring Boot 2.X解决方案

该方法主要与Spring Boot 1.5.X相同,只是略有不同。

在Spring Boot 2.X中,spring.config.location参数的行为与早期版本中的行为略有不同。区别在于,在Spring Boot 2.X中,spring.config.location参数将覆盖默认的配置位置:

  

使用spring.config.location配置自定义配置位置时,它们将替换默认位置。 (来源:Spring Boot Documentation

由于将此参数设置为自定义配置文件夹会覆盖默认位置(我想丢失默认配置位置上的配置文件不是您想要的行为),因此最好使用新的spring.config.additional-location参数不会覆盖,而只会扩展默认位置:

-Dspring.config.additional-location=file:${user.home}/file/path/

(或者,如果您更喜欢使用环境变量而不是JVM参数,则可以使用SPRING_CONFIG_ADDITIONAL-LOCATION环境变量)

参考:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

答案 1 :(得分:0)

能否请您尝试使用下面的JVM参数设置活动配置文件- -Dspring.profiles.active=dev

如果您的要求是限制特定的bean在环境中使用,则可以使用@Profile("dev")注释。

此参考文献可能会对您有所帮助-> https://www.baeldung.com/spring-profiles

答案 2 :(得分:-1)

尝试更改为:

"file:${user.home}/file/path/application-${spring.profiles.active}.properties"

如果有效,请当心,因为如果您有0个有效配置文件,或者超过1个,它将失败。