@Profile注解详解

互联网 19-8-12
@Profile:Spring为我们提供的可以根据当前环境,动态的激活和切换一系列组件的功能;

开发环境develop、测试环境test、生产环境master

数据源:(/dev) (/test) (/master)

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(); 	} }

以上就是@Profile注解详解的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: 注解
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:java怎么用

相关资讯