zoukankan      html  css  js  c++  java
  • Spring注解开发第十二讲--@Profile注解讲解

    @Profile:
        Spring为我们提供的可以根据当前环境,动态的激活和切换一系列组件的功能;
    我们以数据源为例,例如我们想在开发环境使用A数据源,测试环境使用B数据源,上线以后环境使用C数据源.
    那么使用@Profile注解可以帮我们实现这个需求.
    首先编写配置文件将我们的数据库配置添加到配置文件中,代码如下;
    dbconfig.properties
    db.user=root
    db.password=123456
    db.driverClass=com.mysql.jdbc.Driver

    创建主配置类,代码如下:

    @PropertySource("classpath:/dbconfig.properties")
    @Configuration
    public class MainConfigOfProfile implements EmbeddedValueResolverAware{
        
        @Value("${db.user}")
        private String user;
        
        private StringValueResolver valueResolver;
        
        private String  driverClass;
        
        
        @Bean//任何环境下都能加载
        public Yellow yellow(){
            return new Yellow();
        }
        
        @Profile("test")//测试环境才加载
        @Bean("testDataSource")
        public DataSource dataSourceTest(@Value("${db.password}")String pwd) throws Exception{
            ComboPooledDataSource dataSource = new ComboPooledDataSource();
            dataSource.setUser(user);
            dataSource.setPassword(pwd);
            dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
            dataSource.setDriverClass(driverClass);
            return dataSource;
        }
        
        
        @Profile("dev")//开发环境标识
        @Bean("devDataSource")
        public DataSource dataSourceDev(@Value("${db.password}")String pwd) throws Exception{
            ComboPooledDataSource dataSource = new ComboPooledDataSource();
            dataSource.setUser(user);
            dataSource.setPassword(pwd);
            dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/ssm_crud");
            dataSource.setDriverClass(driverClass);
            return dataSource;
        }
        
        @Profile("prod")//生产环境标识
        @Bean("prodDataSource")
        public DataSource dataSourceProd(@Value("${db.password}")String pwd) throws Exception{
            ComboPooledDataSource dataSource = new ComboPooledDataSource();
            dataSource.setUser(user);
            dataSource.setPassword(pwd);
            dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/scw_0515");
            
            dataSource.setDriverClass(driverClass);
            return dataSource;
        }
    
        @Override
        public void setEmbeddedValueResolver(StringValueResolver resolver) {
            // TODO Auto-generated method stub
            this.valueResolver = resolver;
            driverClass = valueResolver.resolveStringValue("${db.driverClass}");
        }
    
    }
    @Profile:指定组件在哪个环境的情况下才能被注册到容器中,不指定,任何环境下都能注册这个组件
      1)、加了环境标识的bean,只有这个环境被激活的时候才能注册到容器中。默认是default环境
      2)、写在配置类上,只有是指定的环境的时候,整个配置类里面的所有配置才能开始生效
      3)、没有标注环境标识的bean在,任何环境下都是加载的;
    运行测试类并制定环境;切换环境的时候 介绍了两种方法,代码如下:
    public class IOCTest_Profile {
        
        //1、使用命令行动态参数: 在虚拟机参数位置加载 -Dspring.profiles.active=test
        //2、代码的方式激活某种环境;
        @Test
        public void test01(){
            AnnotationConfigApplicationContext applicationContext = 
                    new AnnotationConfigApplicationContext();
            //1、创建一个applicationContext
            //2、设置需要激活的环境
            applicationContext.getEnvironment().setActiveProfiles("dev");
            //3、注册主配置类
            applicationContext.register(MainConfigOfProfile.class);
            //4、启动刷新容器
            applicationContext.refresh();
            
            
            String[] namesForType = applicationContext.getBeanNamesForType(DataSource.class);
            for (String string : namesForType) {
                System.out.println(string);
            }
            
            Yellow bean = applicationContext.getBean(Yellow.class);
            System.out.println(bean);
            applicationContext.close();
        }
    
    }

    注意:在使用第二种方式的时候,不能使用获取容器的有参构造器

     
  • 相关阅读:
    在文本框按回车 表单自动提交的解决方法
    类型提示保障数据安全
    LastModified,ETag,CacheControl,Expires 设置页面过期策略
    Netstat 状态分析
    Web 开发与设计师速查手册大全(上)
    Google推出网页加速工具Page Speed
    最近关于twitter架构的一篇文章
    PHP cookie和session的分析(转)
    关于win10深度学习安装配置 CUDA9.0+VS2017+Cudnn7.4.1.5+Anaconda3(cupy安装包)+python3.7+pycharm
    Python命令行解析argparse常用语法使用简介
  • 原文地址:https://www.cnblogs.com/xingjia/p/11265657.html
Copyright © 2011-2022 走看看