1

我在通过按spring.profiles.active属性指定活动配置文件来覆盖默认应用程序属性时遇到问题。

我已经开发了一个示例项目来复制这个问题。我有 2 个 application.yml 文件:

应用程序-default.yml

spring:
  profiles:
    active: local

test:
  value: "This is the test value for application properties of default"

应用程序-local.yml

test:
  value: "This is the test value for application properties of local"

然后我开发了一个组件来打印测试值:

@Component
public class TestComponent {

    @Value("${test.value}")
    private String testValue;

    @PostConstruct
    public void postConstruct() {

        System.out.println(testValue);
    }
}

这段代码的输出是:

2021-01-07 16:19:01.080  INFO 335505 --- [           main] com.test.Application                     : The following profiles are active: local
This is the test value for application properties of default
2021-01-07 16:19:01.419  INFO 335505 --- [           main] com.test.Application                     : Started Application in 0.944 seconds (JVM running for 1.441)

我预计输出将是:

This is the test value for application properties of local

我知道使用application.yml而不是application-default.yml按预期工作,但我的目标是使用application.yml来保存所有配置文件共有的基本属性,并通过使用配置文件指定特定于环境的配置。

我正在使用 spring-boot 2.4.0,build.gradle

plugins {
    id 'java'
}

repositories {
    mavenCentral()
}

dependencies {
    implementation group: 'org.springframework.boot', name: 'spring-boot-starter', version: '2.4.0'
}

为什么这个属性不被覆盖?

4

2 回答 2

0

默认属性文件应称为 application.yml 而不是 application-default.yml

只需尝试重命名它,它应该可以正常工作..在这里阅读更多

https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config-files-profile-specific

于 2021-01-07T19:37:33.977 回答
0

这是由于 spring boot 加载属性的顺序引起的。创建一个带有活动配置文件的 application.yml 文件,以及所有配置文件的公共属性,并从application-default.yml.

spring:
  profiles:
    active: local

您也可以像这样在运行时选择活动配置文件

java -jar example.jar --spring.profiles.active=local
于 2021-01-07T19:20:27.347 回答