Profile:Spring提供的根据当前的环境,动态的激活和切换一系列组件的功能
@Profile 注解:指定组件在哪个环境下才能注册到容器中生效,如果不指定,则在任何环境下都能使用该组件
- 注解在使用了 @Component、@Service、@Controller、@Configuration 等标识的组件上,指定该组件的生效环境
- 注解在配置类的组件上,表示该组件的生效环境,默认环境为 default
- 当配置类中的组件没有使用 @Profile 注解,说明该组件任何环境都生效
注解在配置类上,只有指定的环境才能使用该配置类
@Configuration
public class DemoConfig {
@Bean
@Profile("default") // 表示该组件为默认的环境
public DataSource dataSourceDefault() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUsername("root");
dataSource.setPassword("password");
dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/default");
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
return dataSource;
}
@Bean
@Profile("prod") // 表示该组件为生产环境用
public DataSource dataSourceProd() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUsername("root");
dataSource.setPassword("password");
dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/prod");
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
return dataSource;
}
@Bean
@Profile("test") // 表示该组件为测试环境用
public DataSource dataSourceTest() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUsername("root");
dataSource.setPassword("password");
dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/test");
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
return dataSource;
}
}
激活相应的Profile:
1、在虚拟机启动参数中进行设置:-Dspring.profiles.active = test
2、在容器启动时进行指定:
public static void main(String[] args) {
// 使用无参构造创建容器对象
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext();
// 设置容器的相关属性
// 激活test环境
context.getEnvironment().setActiveProfiles("test");
// 注册主配置类
context.register(DemoConfig.class);
// 启动刷新容器
context.refresh();
}