为了方便多环境适配,Spring Boot简化了profile功能。
- 默认配置文件
application.yaml
任何时候都会加载。 - 指定环境配置文件
application-{env}.yaml
,env
通常替代为test
, - 激活指定环境
- 配置文件激活:
spring.profiles.active=prod
- 命令行激活:
java -jar xxx.jar --spring.profiles.active=prod --person.name=haha
(修改配置文件的任意值,命令行优先)
- 配置文件激活:
- 默认配置与环境配置同时生效
- 同名配置项,profile配置优先
@Profile条件装配功能
1、准备
①例如一个Person类
@Data
@Component
@ConfigurationProperties("person")//在配置文件中配置
public class Person{
private String name;
private Integer age;
}
public interface Person {
String getName();
Integer getAge();
}
②根配置文件
application.properties
person:
name: lun
age: 8
③test环境配置文件
application-test.yaml
person:
name: test-张三
server:
port: 7000
④生产环境配置文件
application-prod.yaml
person:
name: prod-张三
server:
port: 8000
⑤@Profile标注生效环境
在数据、配置、方法或类上标注@Profile注解指定其下内容生效于何种环境
@Profile("test")
生效于test环境
,对应加载application-test.yaml
里的配置。
@Profile("test")//加载application-test.yaml里的
@Component
@ConfigurationProperties("person")
@Data
public class Worker implements Person {
private String name;
private Integer age;
}
@Profile(value = {"prod","default"})
生效与prod环境
,且为默认环境
,对应加载application-prod.yaml
里的配置。
@Profile(value = {"prod","default"})//加载application-prod.yaml里的
@Component
@ConfigurationProperties("person")
@Data
public class Boss implements Person {
private String name;
private Integer age;
}
@Profile还可以修饰在方法上:
class Color {
}
@Configuration
public class MyConfig {
@Profile("prod")
@Bean
public Color red(){
return new Color();
}
@Profile("test")
@Bean
public Color green(){
return new Color();
}
}
2、激活配置
有多种方法可以激活:
①配置文件激活
在application.properties
中使用spring.profiles.active
指定
#激活prod配置文件
spring.profiles.active=prod
#也可以配置某些特定值
person.name=haha
结果:
@Autowired
private Person person;
@GetMapping("/")
public String hello(){
//激活了prod,则返回Boss;激活了test,则返回Worker
return person.getClass().toString();
}
②命令行激活
java -jar xxx.jar --spring.profiles.active=prod --person.name=haha (修改配置文件的任意值,**命令行优先**)
--
后对应的其实就如同配置文件激活的那样,但命令行配置优先级更高。
- 默认配置与环境配置同时生效
- 同名配置项,profile配置优先
profile分组
features.profiles.groups
可以激活一组:
spring.profiles.active=production
spring.profiles.group.production[0]=proddb
spring.profiles.group.production[1]=prodmq