Spring注解@Profile的功能简介说明

打印 上一主题 下一主题

主题 768|帖子 768|积分 2304

转自:
   http://www.java265.com/JavaFramework/Spring/202206/3613.html
下文笔者讲述@Profile注解功能说明,如下所示
  1. @Profile:
  2.    Profile的功能就是配置
  3.     让应用程序来说,不同的环境需要不同的配置
  4. 如:
  5.   开发环境,应用需要连接一个可供调试的数据库单机进程
  6.   生产环境,应用需要使用正式发布的数据库,通常是高可用的集群
  7.   测试环境,应用只需要使用内存式的模拟数据库
  8.   Spring框架提供了多profile的管理功能,我们可以使用profile功能来区分不同环境的配置
复制代码

配置类
  1. package com.java265.config;
  2. import com.mchange.v2.c3p0.ComboPooledDataSource;
  3. import org.springframework.beans.factory.annotation.Value;
  4. import org.springframework.context.EmbeddedValueResolverAware;
  5. import org.springframework.context.annotation.Bean;
  6. import org.springframework.context.annotation.Configuration;
  7. import org.springframework.context.annotation.Profile;
  8. import org.springframework.context.annotation.PropertySource;
  9. import org.springframework.util.StringValueResolver;
  10. import javax.sql.DataSource;
  11. /**
  12. * Profile:
  13. *      Spring为我们提供的可以根据当前环境,动态的激活和切换一系列组件的功能
  14. *
  15. *  开发环境、测试环境、生产环境
  16. *  数据源:(/A)、(/B)、(/C)
  17. *
  18. *
  19. * @Profile:指定组件在哪个环境下才能被注册到容器中,不指定,任何环境都会注册
  20. *
  21. *  可以写在类上,只有是指定的环境,该类的所有配置才能开始生效
  22. */
  23. @Configuration
  24. @PropertySource("classpath:db.properties")
  25. public class MainConfigOfProfile implements EmbeddedValueResolverAware {
  26.     @Value("${db.user}")
  27.     private String user;
  28.     private StringValueResolver valueResolver;
  29.     private String driverClass;
  30.     @Profile("test")
  31.     @Bean("testDataSource")
  32.     public DataSource dataSource(@Value("${db.password}") String password) throws Exception {
  33.         ComboPooledDataSource dataSource = new ComboPooledDataSource();
  34.         dataSource.setUser(user);
  35.         dataSource.setPassword(password);
  36.         dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
  37.         dataSource.setDriverClass(driverClass);
  38.         return dataSource;
  39.     }
  40.     @Profile("dev")
  41.     @Bean("devDataSource")
  42.     public DataSource dataSourceDev(@Value("${db.password}") String password) throws Exception {
  43.         ComboPooledDataSource dataSource = new ComboPooledDataSource();
  44.         dataSource.setUser("root");
  45.         dataSource.setPassword(password);
  46.         dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/dev");
  47.         dataSource.setDriverClass(driverClass);
  48.         return dataSource;
  49.     }
  50.     @Profile("prod")
  51.     @Bean("prodDataSource")
  52.     public DataSource dataSourceProd(@Value("${db.password}") String password) throws Exception {
  53.         ComboPooledDataSource dataSource = new ComboPooledDataSource();
  54.         dataSource.setUser("root");
  55.         dataSource.setPassword(password);
  56.         dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/prod");
  57.         dataSource.setDriverClass(driverClass);
  58.         return dataSource;
  59.     }
  60.     @Override
  61.     public void setEmbeddedValueResolver(StringValueResolver stringValueResolver) {
  62.         this.valueResolver = stringValueResolver;
  63.         this.driverClass = valueResolver.resolveStringValue("${db.driverClass}");
  64.     }
  65. }
复制代码
测试
  1. @Test
  2.     public void test02(){
  3.         //创建一个ApplicationContext
  4.         AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext();
  5.         //设置需要激活的环境(可以多个)
  6.         ac.getEnvironment().setActiveProfiles("test", "dev");
  7.         //注册主配置类
  8.         ac.register(MainConfigOfProfile.class);
  9.         //启动刷新容器
  10.         ac.refresh();
  11.         String[] names = ac.getBeanNamesForType(DataSource.class);
  12.         for(String name : names){
  13.             System.out.println(name);
  14.         }
  15.         ac.close();
  16.     }
  17. ---运行以上代码,将输出以下信息------
  18. testDataSource
  19. devDataSource
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

前进之路

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表