• 线上环境prod(product)
  • 开发环境dev(development)
  • 测试环境test
  • 提测环境qa

boot选择启动某个配置文件

  • bootstrap.ymlapplication.yml之前加载,一般在spring cloud使用配置中心时使用;
  • bootstrap.yml同名属性会被application.yml覆盖;
  • application.ymlapplication.properties之前加载,同名属性会被application.properties覆盖

TIP

Spring Boot配置文件提供了隔离一部分应用程序配置的方法,并可使其仅在某指定环境可用。任何有@Component和@Configuration注解的Bean都用@profile来指定加载哪个配置文件。如:

@Profile

  • @Component或**@Configuration注解的类可以使用@profil**e
  • @Profile中需要指定一个字符串,约定生效的环境
    • @profile注解的作用是指定类或方法在特定的 Profile 环境生效
    • 任何@Component或@Configuration注解的类都可以使用@Profile注解。
    • 在使用DI来依赖注入的时候,能够根据@profile标明的环境,将注入符合当前运行环境的相应的bean。

// class
@Configuration 
@Profile( “production”)//加载production配置文件,即也代表当前是production环境
public class Demo{
    // ...
}

// method
@Configuration
public class AppConfig {

    @Bean("dataSource")
    @Profile("dev")
    public DataSource standaloneDataSource() {
        return new EmbeddedDatabaseBuilder()
            .setType(EmbeddedDatabaseType.HSQL)
            .addScript("classpath:com/bank/config/sql/schema.sql")
            .addScript("classpath:com/bank/config/sql/test-data.sql")
            .build();
    }

    @Bean("dataSource")
    @Profile("prod")
    public DataSource jndiDataSource() throws Exception {
        Context ctx = new InitialContext();
        return (DataSource) ctx.lookup("java:comp/env/jdbc/datasource");
    }
}

profile激活

实际使用中,注解中标示了prod、test、qa等多个环境,运行时使用哪个profile由spring.profiles.active控制

  • 环境的值与application-prod.properties**-**后面的值对应,这是SpringBoot约定好的 以普通Spring的方式,可以使用spring.profile.active环境属性来指定哪些配置文件处于活动状态
# spring.profiles.active = dev
# 或
spring:
  profiles:
    active: dev

  • java -jar abcdte.jar --spring.profiles.active=dev

以编程方式启动某配置文件

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(DemoApplication.class);
        //启动dev配置文件
        app.setAdditionalProfiles("dev");   // dev 或prod
        app.run(args);
    }
}

maven的pom文件中启动某配置文件

<profiles>
    <profile>
        <!-- 本地开发环境 -->
        <id>dev</id>
        <properties>
            <profiles.active>dev</profiles.active>
        </properties>
        <activation>
            <!-- 开启本地开发环境 -->
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <!-- 测试环境 -->
        <id>test</id>
        <properties>
            <profiles.active>test</profiles.active>
        </properties>
    </profile>
    <profile>
        <!-- 生产环境 -->
        <id>pro</id>
        <properties>
            <profiles.active>pro</profiles.active>
        </properties>
    </profile>
</profiles>

YAML下的列表

如,以下yaml配置文件:


book: 
    list: 
    -name: Java
    -name: C++
 

  • 可用以下形式获取book列表:
@ConfigurationProperties(“book”)
 public class FooProperties{
    private final List <MyPojo> list = new ArrayList <>();
    public List <MyPojo>  getList(){
         return this .list;
    }
}

资源配置文件

  • Springboot的资源配置文件除了application.properties之外,还可以有对应的资源文件application-{profile}.properties
  • 假设,一个应用的工作环境有:dev、test、prod
  • applcation.properties - 公共配置
  • application-dev.properties - 开发环境配置
  • application-test.properties - 测试环境配置
  • application-prod.properties - 生产环境配置
  • 不同的properties配置文件也可以是在 applcation.properties 文件中来激活 profile:spring.profiles.active = test