通过spring.profiles.active覆盖默认应用程序属性

h6my8fg2  于 2021-06-27  发布在  Java
关注(0)|答案(3)|浏览(592)

我在通过指定活动配置文件来重写默认应用程序属性时遇到问题 spring.profiles.active 财产。
我开发了一个示例项目来复制这个问题。我有2个application.yml文件:
应用程序-默认.yml

spring:
  profiles:
    active: local

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

应用程序-本地.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 保存所有配置文件的公共基本属性,并通过使用配置文件指定特定于环境的配置。
我用的是SpringBoot2.4.0, build.gradle ```
plugins {
id 'java'
}

repositories {
mavenCentral()
}

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

为什么不重写此属性?
jm2pwxwz

jm2pwxwz1#

这是由于spring boot加载属性的顺序造成的。创建一个包含活动概要文件和所有概要文件的公共属性的application.yml文件,并从中删除spring.profiles.active属性 application-default.yml .

spring:
  profiles:
    active: local

您还可以在运行时选择活动概要文件,如下所示

java -jar example.jar --spring.profiles.active=local
rkttyhzu

rkttyhzu2#

默认属性文件应称为application.yml,而不是application-default.yml
只要试着重新命名它就可以了。。在这里阅读更多
https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-具有特定于配置文件的外部配置文件

s1ag04yj

s1ag04yj3#

尝试将所有配置文件合并到application.yml中,如下所示。请注意 --- 用于分隔纵断面。
使用 SPRING_PROFILES_ACTIVE 通过环境变量选择活动配置文件。

server:
  error:
    include-message: always
    include-binding-errors: always
spring:
  profiles:
    active:
      - dev
  datasource:
    generate-unique-name: false
  h2:
    console:
      enabled: true
  jpa:
    properties:
      javax:
        persistence:
          validation:
            mode: none
  data:
    web:
      pageable:
        default-page-size: 10
        max-page-size: 100
---
spring:
  config:
    activate:
      on-profile: prod
  jpa:
    hibernate:
      ddl-auto: update
  h2:
    console:
      enabled: false
---
spring:
  config:
    activate:
      on-profile: dev
  jpa:
    hibernate:
      ddl-auto: update  
---
spring:
  config:
    activate:
      on-profile: test

相关问题