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();
        }
    
    }
  • 相关阅读:
    Powershell & SQL
    Powershell运行Invoke-Sqlcmd命令的先决条件
    Powershell实现Telnet Port
    Quest Active Directory
    数据库系统概述(Data Model、DBMS、DBS、RDBS、Structured Query Language)
    Oracle简介
    Downgrading an Exchange 2010 Server(Exchange降级)
    MAPISession(EventID9646-MS-ExchangeIS)
    指定运行Exchange Powershell的Server
    Linux磁盘管理命令(fdisk,mount,umount,mkfs)
  • 原文地址:https://www.cnblogs.com/lyh233/p/12454578.html
Copyright © 2011-2022 走看看