- 线上环境prod(product)
- 开发环境dev(development)
- 测试环境test
- 提测环境qa
boot选择启动某个配置文件
bootstrap.yml
在application.yml
之前加载,一般在spring cloud使用配置中心时使用;bootstrap.yml
同名属性会被application.yml
覆盖;application.yml
在application.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