Profile:Spring提供的根据当前的环境,动态的激活和切换一系列组件的功能

    @Profile 注解:指定组件在哪个环境下才能注册到容器中生效,如果不指定,则在任何环境下都能使用该组件

    • 注解在使用了 @Component、@Service、@Controller、@Configuration 等标识的组件上,指定该组件的生效环境
    • 注解在配置类的组件上,表示该组件的生效环境,默认环境为 default
      • 当配置类中的组件没有使用 @Profile 注解,说明该组件任何环境都生效
    • 注解在配置类上,只有指定的环境才能使用该配置类

      1. @Configuration
      2. public class DemoConfig {
      3. @Bean
      4. @Profile("default") // 表示该组件为默认的环境
      5. public DataSource dataSourceDefault() {
      6. DruidDataSource dataSource = new DruidDataSource();
      7. dataSource.setUsername("root");
      8. dataSource.setPassword("password");
      9. dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/default");
      10. dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
      11. return dataSource;
      12. }
      13. @Bean
      14. @Profile("prod") // 表示该组件为生产环境用
      15. public DataSource dataSourceProd() {
      16. DruidDataSource dataSource = new DruidDataSource();
      17. dataSource.setUsername("root");
      18. dataSource.setPassword("password");
      19. dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/prod");
      20. dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
      21. return dataSource;
      22. }
      23. @Bean
      24. @Profile("test") // 表示该组件为测试环境用
      25. public DataSource dataSourceTest() {
      26. DruidDataSource dataSource = new DruidDataSource();
      27. dataSource.setUsername("root");
      28. dataSource.setPassword("password");
      29. dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/test");
      30. dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
      31. return dataSource;
      32. }
      33. }

    激活相应的Profile:
    1、在虚拟机启动参数中进行设置:-Dspring.profiles.active = test
    2、在容器启动时进行指定:

    1. public static void main(String[] args) {
    2. // 使用无参构造创建容器对象
    3. AnnotationConfigApplicationContext context =
    4. new AnnotationConfigApplicationContext();
    5. // 设置容器的相关属性
    6. // 激活test环境
    7. context.getEnvironment().setActiveProfiles("test");
    8. // 注册主配置类
    9. context.register(DemoConfig.class);
    10. // 启动刷新容器
    11. context.refresh();
    12. }