5

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

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

现在,我想使用活动配置文件来实现相同的目标。如果开发配置文件处于活动状态,我需要获取 application-dev.properties,如果阶段配置文件处于活动状态,我想获取 application-stage.properties 等等。

我正在使用带有 Spring Boot 1.5.x 的 Windows 平台和 JAVA 8

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

spring.profiles.active=dev
4

2 回答 2

9

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 文档

由于将此参数设置为您的自定义配置文件夹将覆盖默认位置(我认为丢失默认配置位置上的配置文件不是所需的行为),因此最好使用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

于 2019-07-04T23:50:02.447 回答
0

您能否尝试使用 JVM 参数设置活动配置文件,如下所示 - -Dspring.profiles.active=dev

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

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

于 2019-07-04T13:29:07.613 回答