【Spring学习笔记】基于profile的高级装配

      日常工作中有时候我们会面临一些问题,需要将代码在不同环境之前来回切换,比如在开发环境可以使用嵌入式数据库Hypersonic,这个在开发环境再适合不过了,但是要将他放在生产则就是行不通了。这个时候Spring提供的profile就可以发挥作用了。

下面是我的一个小demo:

package com.example.readingli.db;



import javax.sql.DataSource;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
import org.springframework.jndi.JndiObjectFactoryBean;
/**
 * 
 * @author liugd
 * @company SI-TECH
 *
 */
@Configuration
//@Profile("production")  Spring3.2后可以注解到方法上
public class Dbcfg {
	@Profile("production")
	@Bean(destroyMethod="shutdown")
	public DataSource dataSource(){
		return new EmbeddedDatabaseBuilder()
		.setType(EmbeddedDatabaseType.H2)
		.addScript("classpath:schema.sql")
		.addScript("classpath:test-data.sql").build();
	}
	@Profile("dev")
	@Bean
	public DataSource productionDataSource(){
		JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean(); 
		jndiObjectFactoryBean.setJndiName("jdbc/myDS");
		jndiObjectFactoryBean.setResourceRef(true);
		jndiObjectFactoryBean.setProxyInterface(DataSource.class);
		return (DataSource)jndiObjectFactoryBean;
	}
}
在bean上增加@Profile注解用于激活bean使用。

激活方法:

作为DispatcherServlet的初始化参数;
作为Web应用的上下文参数;作为JNDI条目;
作为环境变量;
作为JVM的系统属性;
在集成测试类上,使用@ActiveProfiles注解设置。

作为JNDI条目;
作为环境变量;
作为JVM的系统属性;
在集成测试类上,使用@ActiveProfiles注解设置。

我个人比较喜欢在web.xml中配置,也就是作为DispatcherServlet的参数




	测试demo

	
	
		contextConfigLocation
		classpath:/server-corecfg/applicationContext.xml,classpath:/server-corecfg/s*/*.xml,classpath:/server-corecfg/s*/*/*.xml,classpath:/server-corecfg/s*/*/*/*.xml
	
	
		spring.profiles.default
		production
	

	
		org.springframework.web.context.ContextLoaderListener
	

	
	
		CXFServlet
		org.springframework.web.servlet.DispatcherServlet
		
			spring.profiles.default
			production
		
		1
	
	
		CXFServlet
		/ws/*
	
	


你可能感兴趣的:(Spring基础)