在实际开发中,项目即将上线时,可能需要不停的在开发环境、生产环境、测试环境之间进行切换。
那么我们此时就需要用Profile来实现了
java配置实现
实体类
package com.zhouym.javabean;
public class DataSource {
private String url;
private String name;
private String password;
public DataSource(String url, String name, String password) {
this.url = url;
this.name = name;
this.password = password;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "DataSource [url=" + url + ", name=" + name + ", password=" + password + "]";
}
}
创建一个AppJavaConfig类
package com.zhouym.javabean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Configuration
@ComponentScan("com.zhouym.javabean")
public class AppJavaConfig {
//通过Profile注解,标记当前环境是出于什么环境下,我们可以通过在测试类那边传递profile的属性值动态的改变环境
@Bean("ds")
@Profile("dev") //profile dev标记为开发环境
public DataSource devDs() {
return new DataSource("http://devl.com", "root", "123456");
}
@Bean("ds")
@Profile("pro") //profile pro标记为生产环境
public DataSource proDs() {
return new DataSource("http://pros.com", "admin", "12345");
}
}
测试类
package com.zhouym.javabean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class AutoTest {
public static void main(String[] args) {
AnnotationConfigApplicationContext acac = new AnnotationConfigApplicationContext();
acac.getEnvironment().setActiveProfiles("dev");
acac.register(AppJavaConfig.class);
acac.refresh();
DataSource ds = acac.getBean(DataSource.class);
System.out.println(ds);
}
}
测试结果
改变profile的值为pro,结果为
xml配置实现
DataSource类
package com.zhouym.javabean;
public class DataSource {
private String url;
private String name;
private String password;
/**
* 提供无参构造
*/
public DataSource() {
}
public DataSource(String url, String name, String password) {
this.url = url;
this.name = name;
this.password = password;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "DataSource [url=" + url + ", name=" + name + ", password=" + password + "]";
}
}
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.zhouym.javabean.DataSource">
<property name="url" value="http://devl.com"/>
<property name="name" value="root"/>
<property name="password" value="1234"/>
</bean>
</beans>
<beans profile="pro">
<bean class="com.zhouym.javabean.DataSource">
<property name="url" value="http://pros.com"/>
<property name="name" value="admin"/>
<property name="password" value="1234"/>
</bean>
</beans>
</beans>
测试类
package com.zhouym.javabean;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class AutoTest {
public static void main(String[] args) {
ClassPathXmlApplicationContext cpac = new ClassPathXmlApplicationContext();
cpac.getEnvironment().setActiveProfiles("dev");
cpac.setConfigLocation("ApplicationContext.xml");
cpac.refresh();
DataSource ds = cpac.getBean(DataSource.class);
System.out.println(ds);
}
}
测试结果
改变测试类中的profile值为pro,结果为