SSH项目多数据源的配置

使用SSH框架开发应用时,经常遇到需要配置多数据源的情况,下面说一下使用配置文件和注解的两种配置方式。


一、配置文件方式。

这种方式在比较早一点的项目里经常用到。在spring的配置文件中,按如下方式配置:


		
		
			
		
		
			
				${hibernate.dialect}
				${hibernate.show_sql}
				
			
		
		
			true
		
	


		
		
			
		
		
			
				${hibernate.dialect}
				${hibernate.show_sql}
				
			
		
		
			true
		
	

在Dao的配置文件中,分别注入不同的SessionFactory。


		
	


		
	

二、注解方式。

目前的项目基本都是采用注解了。

当自定义的Dao实现了org.springframework.orm.hibernate3.support.HibernateDaoSupport  时,若Dao是以注解的形式提供bean,则要以注解的形式注入SessionFactory,而HibernateDaoSupport 中相关的set方法都是final 的,即不能覆盖:

	public final void setSessionFactory(SessionFactory sessionFactory) {  
        if (this.hibernateTemplate == null || sessionFactory != this.hibernateTemplate.getSessionFactory()) {  
             this.hibernateTemplate = createHibernateTemplate(sessionFactory);  
         }  
     }  
   
 	public final void setHibernateTemplate(HibernateTemplate hibernateTemplate) {  
         this.hibernateTemplate = hibernateTemplate;  
     }  

所以采用如下方式解决:

在spring配置文件中:

	 
	
		
			${jdbc.driverClassName}
		
		
			${jdbc.url}
		
		
			${jdbc.username}
		
		
			${jdbc.password}
		
		 
		
			${c3p0.acquireIncrement}
			
		 
		
			${c3p0.acquireRetryAttempts}
		
		 
		
			${c3p0.acquireRetryDelay}
		
		
			${c3p0.initialPoolSize}
		
		
			${c3p0.testConnectionOnCheckout}
		
		
			${c3p0.minPoolSize}
		
		
			${c3p0.maxPoolSize}
		
		
			${c3p0.maxIdleTime}
		 
		
			${c3p0.idleConnectionTestPeriod}
		
		
			${c3p0.maxStatements}
		
		
			${c3p0.numHelperThreads}
		
	

	 
	
		
		
			
		
		
		 
			
				com.common.po
				com.permission.po
				com.opinion.po
			
		
		
			
				
					org.hibernate.dialect.MySQLDialect
				
				false
				
				
				org.hibernate.cache.EhCacheProvider
				${hibernate.ehcache_config_file}
				true
			
		
	

	
	
		
			${jdbc.browser.driverClassName}
		
		
			${jdbc.browser.url}
		
		
			${jdbc.browser.username}
		
		
			${jdbc.browser.password}
		
		 
		
			${c3p0.acquireIncrement}
			
		 
		
			${c3p0.acquireRetryAttempts}
		
		 
		
			${c3p0.acquireRetryDelay}
		
		
			${c3p0.initialPoolSize}
		
		
			${c3p0.testConnectionOnCheckout}
		
		
			${c3p0.minPoolSize}
		
		
			${c3p0.maxPoolSize}
		
		
			${c3p0.maxIdleTime}
		 
		
			${c3p0.idleConnectionTestPeriod}
		
		
			${c3p0.maxStatements}
		
		
			${c3p0.numHelperThreads}
		
	

	 
	
		
		
			
		
		
		 
			
				com.browser.po
			
		
		
			
				
					org.hibernate.dialect.MySQLDialect
				
				true
				
				
				org.hibernate.cache.EhCacheProvider
				${hibernate.ehcache_config_file}
				true
			
		
	


Dao默认使用sessionFactory,使用其它数据源的Dao类按下面方式修改:
@Repository("websiteDao")
public class WebsiteDaoImpl extends BaseHibernateDao implements WebsiteDao{
	
	@Resource(name="browserSessionFactory")
	private SessionFactory sessionFactory;
	
	@PostConstruct 
    public void setMySessionFactory(){ 
        super.setSessionFactory(sessionFactory);  
    }
}
即初始化时,调用setMySessionFactory()方法,把browserSessionFactory注入。这样不同的Dao可以使用不同的数据源了。


你可能感兴趣的:(hibernate,spring,J2EE)