zoukankan      html  css  js  c++  java
  • 17、spring注解学习(自动装配)——@Profile根据当前环境,动态的激活和切换一系列组件的功能

     @Profile:
              Spring为我们提供的可以根据当前环境,动态的激活和切换一系列组件的功能;
      
      开发环境develop、测试环境test、生产环境master
      数据源:(/dev) (/test) (/master)
     
      @Profile:指定组件在哪个环境的情况下才能被注册到容器中,不指定,任何环境下都能注册这个组件
      
        1) 加了环境标识的bean,只有这个环境被激活的时候才能注册到容器中。默认是default环境
        2) 写在配置类上,只有是指定的环境的时候,整个配置类里面的所有配置才能开始生效

    package com.spring.config;
     
    import java.beans.PropertyVetoException;
     
    import javax.sql.DataSource;
     
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.EmbeddedValueResolverAware;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Profile;
    import org.springframework.context.annotation.PropertySource;
    import org.springframework.util.StringValueResolver;
     
    import com.mchange.v2.c3p0.ComboPooledDataSource;
     
    /**
     * Profile:
     *         Spring为我们提供的可以根据当前环境,动态的激活和切换一系列组件的功能;
     * 
     * 开发环境develop、测试环境test、生产环境master
     * 数据源:(/dev) (/test) (/master)
     *
     * @Profile:指定组件在哪个环境的情况下才能被注册到容器中,不指定,任何环境下都能注册这个组件
     * 
     * 1) 加了环境标识的bean,只有这个环境被激活的时候才能注册到容器中。默认是default环境
     * 2) 写在配置类上,只有是指定的环境的时候,整个配置类里面的所有配置才能开始生效
     * 
     */
    @PropertySource("classpath:/dbconfig.properties")
    @Configuration
    public class MainConfigOfProfile implements EmbeddedValueResolverAware{
        
        @Value("${db.user}")
        private String user;
        
        private String driverClass;
        
        @Profile("default")
        @Bean("test")
        public DataSource testDataSource(@Value("${db.password}")String password) throws PropertyVetoException {
            ComboPooledDataSource dataSource = new ComboPooledDataSource();
            dataSource.setUser(user);
            dataSource.setPassword(password);
            dataSource.setDriverClass(driverClass);
            return dataSource;
        }
        
        @Profile("dev")
        @Bean("dev")
        public DataSource devDataSource(@Value("${db.password}")String password) throws PropertyVetoException {
            ComboPooledDataSource dataSource = new ComboPooledDataSource();
            dataSource.setUser(user);
            dataSource.setPassword(password);
            dataSource.setDriverClass(driverClass);
            return dataSource;
        }
        
        @Profile("master")
        @Bean("master")
        public DataSource masterDataSource(@Value("${db.password}")String password) throws PropertyVetoException {
            ComboPooledDataSource dataSource = new ComboPooledDataSource();
            dataSource.setUser(user);
            dataSource.setPassword(password);
            dataSource.setDriverClass(driverClass);
            return dataSource;
        }
     
        public void setEmbeddedValueResolver(StringValueResolver resolver) {
            String driverClass = resolver.resolveStringValue("${db.driverClass}");
            this.driverClass = driverClass;
        }
    }
    package com.spring.test;
     
    import java.util.Arrays;
     
    import javax.sql.DataSource;
     
    import org.junit.Test;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
     
    import com.spring.config.MainConfigOfProfile;
     
     
    public class IOCTestProfile {
        //1. 使用命令行动态参数:在虚拟机参数位置加载 -Dspring.profiles.active=test
        //2. 使用代码的方式激活某种环境;
        @Test
        public void test01() {
            AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfProfile.class);
            //1. 创建一个applicationContext
            //2. 设置需要激活的环境
            applicationContext.getEnvironment().setActiveProfiles("dev","master");
            //3. 注册主配置类
            applicationContext.register(MainConfigOfProfile.class);
            //4. 启动刷新容器
            applicationContext.refresh();
            
            String[] beanNamesForType = applicationContext.getBeanNamesForType(DataSource.class);
            System.out.println(Arrays.toString(beanNamesForType));
            
            applicationContext.close();
        }
     
     
            @Test
        public void test02() {
            AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfProfile.class);
            
            String[] beanNamesForType = applicationContext.getBeanNamesForType(DataSource.class);
            System.out.println(Arrays.toString(beanNamesForType));
            
            applicationContext.close();
        }
    
    }
  • 相关阅读:
    Python系列:5- Day1
    Python系列:4-计算机中的进制和编码
    操作系统随笔:什么是微内核和宏内核?【华为鸿鹄操作系统-微内核】
    Python系列:3-操作系统简史
    Python系列:2-电脑结构和CPU、内存、硬盘三者之间的关系
    数据结构中头结点和头指针那么易混淆吗
    pareto最优解(多目标智能算法要用到)
    Matlab学习中遇到的不熟悉的函数(智能算法学习第一天)
    6-2
    6-1
  • 原文地址:https://www.cnblogs.com/lyh233/p/12454578.html
Copyright © 2011-2022 走看看