一、作用
@Profile:指定组件在哪个环境的情况下才能被注册到容器中,不指定,任何环境都能注册这个组件
加了环境标识的bean,只有这个环境被激活时才能注册到容器中。默认是default环境
例:
@PropertySource(value={"classpath:jdbc.properties"})
@Configuration
public class ConfigurationBean {
@Value("${mysql.user}")
private String username;
@Value("${mysql.password}")
private String password;
@Value("${mysql.url}")
private String jdbcUrl;
@Value("${mysql.driver}")
private String driverClass;
@Profile("dev")
@Bean
public DruidDataSource devDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setUrl(jdbcUrl);
dataSource.setDriverClassName(driverClass);
System.out.println("dev environment.....");
return dataSource;
}
@Profile("test")
@Bean
public DruidDataSource testDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setUrl(jdbcUrl);
dataSource.setDriverClassName(driverClass);
System.out.println("test environment.....");
return dataSource;
}
}
public static void main(String[] args) { AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext( ConfigurationBean.class); DruidDataSource bean = applicationContext.getBean(DruidDataSource.class); System.out.println("currentBean=" + bean); applicationContext.close(); }
运行参数
-Dspring.profiles.active=test
打印:
test environment..... currentBean={ CreateTime:"2019-06-08 23:18:52", ActiveCount:0, PoolingCount:0, CreateCount:0, DestroyCount:0, CloseCount:0, ConnectCount:0, Connections:[ ] }
或用代码方式设置激活环境
applicationContext.getEnvironment().setActiveProfiles(profiles);