一、作用

@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);