spring的profile注解

为什么要使用这个@profile注解。@profile注解是spring提供的一个用来标明当前运行环境的注解。我们正常开发的过程中经常遇到的问题是,开发环境是一套环境,qa测试是一套环境,线上部署又是一套环境。这样从开发到测试再到部署,会对程序中的配置修改多次,尤其是从qa到上线这个环节,让qa的也不敢保证改了哪个配置之后能不能在线上运行。

为了解决上面的问题,我们一般会使用一种方法,就是配置文件,然后通过不同的环境读取不同的配置文件,从而在不同的场景中跑我们的程序。

那么,spring中的@profile注解的作用就体现在这里。在spring使用DI来依赖注入的时候,能够根据当前制定的运行环境来注入相应的bean。最常见的就是使用不同的DataSource了。

下面详细的介绍一下,如何通过spring的@profile注解实现上面的功能。

主要有两种方式

一种是直接java里面使用注解完成

先创建javaBean(Datasource) (记得创建无参,有参构造方法和getter,setter方法)

public class Datasource {
private String url;
private String userName;
private String password;

然后是java配置类

@Configuration
//@ComponentScan(“com.sxt.pojo”)
public class Config {

@Bean
@Profile("dev")
public Datasource devDs(){
	return new Datasource("http://dev:8080/","admin","admin");
}


@Bean
@Profile("pro")
public Datasource proDs(){
	return new Datasource("http://pro:8083/","root","root");
}

}

然后测试

public static void main(String[] args) {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext();
//设置使用哪种环境
ac.getEnvironment().setActiveProfiles(“dev”);
ac.register(Config.class);
ac.refresh();

	Datasource ds = ac.getBean(Datasource.class);
	System.out.println(ds);
}

以上是java方式的@profile注解的使用

xml配置方式的使用

同样需要Datasource这个实体类

public class Datasource {
private String url;
private String userName;
private String password;

然后需要创建spring的配置文件 ,取名为applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans profile="dev">
	<bean class="com.sxt.pojo.Datasource">
		<property name="url" value="http://dev1:8080/" />
		<property name="userName" value="admin" />
		<property name="password" value="admin" />
	</bean>
</beans>

<beans profile="pro">
	<bean class="com.sxt.pojo.Datasource">
		<property name="url" value="http:/pro1:8081/" />
		<property name="userName" value="root" />
		<property name ="password" value="root" />
	</bean>
</beans>

然后测试

public static void main(String[] args) {
	ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
	 //设置使用哪种环境
	 ac.getEnvironment().setActiveProfiles("dev"); 
	 ac.refresh();
	
	Datasource ds = ac.getBean(Datasource.class);
	System.out.println(ds);
}

注意java方式和xml方式初始化spring容器的方法是不同的

java的是创建AnntotionConfigApplication对象

通过该对象的register方法获取到java的配置类  Javaconfig

在通过getBean去获取profile注解设置的名字

xml的是实例化applicationContext  ac  = new ClassPathXmlApplicationContext(“applicationContext.xml”);

实例化过程中把配置文件传入 , 直接初始化spring容器 ,

然后再在通过getBean去获取profile注解设置的名字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值