11-注解驱动开发-@Profile

本文知识点来源于尚硅谷,感谢尚硅谷为广大学子提供的优质教育资源,感谢各位老师热情指导,本文仅作为学习笔记使用,记录学习心得,如有不适,请联系作者。

Spring 为我们提供的可以根据当前环境,动态的激活和切换一系列bean的功能。

指定组件在哪个环境下才能被注册到容器中,不指定,任何环境下都能注册 。

加了环境标识的bean,只有这个环境被激活的时候才能注册到容器中 默认是default环境。

已切换数据源为例:
导包:

		<dependency>
			<groupId>c3p0</groupId>
			<artifactId>c3p0</artifactId>
			<version>0.9.1.2</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.47</version>
		</dependency>

配置类如下:

/**
*@Profile
*	可加在类上,全局配置
*	也可加在方法上单独配置
*/
@Configuration
public class MainConfigOfProfile {
	
	//@Profile("Test")
	@Bean
	public DataSource dataSourceTest() throws Exception {
		ComboPooledDataSource dataSource = new ComboPooledDataSource();
		dataSource.setUser("root");
		dataSource.setPassword("123456");
		dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mmall");
		dataSource.setDriverClass("com.mysql.jdbc.Driver");
		return dataSource;
	}
	
	//@Profile("Dev")
	@Bean
	public DataSource dataSourceDev() throws Exception {
		ComboPooledDataSource dataSource = new ComboPooledDataSource();
		dataSource.setUser("root");
		dataSource.setPassword("123456");
		dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/tedu_store");
		dataSource.setDriverClass("com.mysql.jdbc.Driver");
		return dataSource;
	}
	
	//@Profile("Prod")
	@Bean
	public DataSource dataSourceProd() throws Exception {
		ComboPooledDataSource dataSource = new ComboPooledDataSource();
		dataSource.setUser("root");
		dataSource.setPassword("123456");
		dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/sso");
		dataSource.setDriverClass("com.mysql.jdbc.Driver");
		return dataSource;
	}
}

测试方法如下:

@Test
	public void test() {
		AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfProfile.class);
		String[] beanNames = applicationContext.getBeanNamesForType(DataSource.class);
		for (String beanName : beanNames) {
			System.out.println(beanName);
		}
	}

没有加环境标识的bean,都会添加到容器管理

dataSourceTest
dataSourceDev
dataSourceProd

如何指定环境加载呢?
方式一:
可以启动的时候指定**-Dspring.profiles.active=Test**
在这里插入图片描述
输出:

dataSourceTest

方式二:
代码方式激活:
放开配置类中的@Profile注释,修改测试类:

	@Test
	public void test() {		
		// 1.创建IOC容器,使用无参构造器,防止refresh()刷新
		AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
		// 2.设置需要激活的环境
		applicationContext.getEnvironment().setActiveProfiles("Test", "Dev");
		// 3.注册主配置类
		applicationContext.register(MainConfigOfProfile.class);
		// 4.启动刷新容器
		applicationContext.refresh();
		
		String[] beanNames = applicationContext.getBeanNamesForType(DataSource.class);
		for (String beanName : beanNames) {
			System.out.println(beanName);
		}
	}

输出:

dataSourceTest
dataSourceDev
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值