spring-profile

爲何要使用這個@profile註解。@profile註解是spring提供的一個用來標明當前運行環境的註解。咱們正常開發的過程當中常常遇到的問題是,開發環境是一套環境,qa測試是一套環境,線上部署又是一套環境。這樣從開發到測試再到部署,會對程序中的配置修改屢次,尤爲是從qa到上線這個環節,讓qa的也不敢保證改了哪一個配置以後能不能在線上運行。java

爲了解決上面的問題,咱們通常會使用一種方法,就是配置文件,而後經過不一樣的環境讀取不一樣的配置文件,從而在不一樣的場景中跑咱們的程序。spring

那麼,spring中的@profile註解的做用就體如今這裏。在spring使用DI來依賴注入的時候,可以根據當前制定的運行環境來注入相應的bean。最多見的就是使用不一樣的DataSource了。app

 

下面詳細的介紹一下,如何經過spring的@profile註解實現上面的功能。測試

主要有兩種方式url

一種是直接java裏面使用註解完成code

先建立javaBean(Datasource) (記得建立無參,有參構造方法和getter,setter方法)xml

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 xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
 
 	<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>
 	
 
 </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註解設置的名字

相關文章
相關標籤/搜索