spring對hibernate多數據源均實現延時加載

     最近在優化公司的系統的時候mysql數據庫採用了讀寫分離策略,同樣的sessionFactory要配置兩個,但原有的項目中大量應用了hibernate的延時加載,在調試的時候才發現,無論如何都不能同時實現兩個sessionFactory的延時加載,後來通過翻閱資料和閱讀源碼,終於找到了解決方案:

兩個sessionFactory的在spirng配置如下:

 <bean
		id="sessionFactoryAssist"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="configurationClass">
			<value>com.landray.kmss.sys.config.loader.HibernateConfiguration</value>
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">
					${hibernate.dialect}
				</prop>
			</props>
		</property>
		<property name="dataSource">
			<ref bean="dataSourceAssist" />
		</property>
		<property name="lobHandler">
			<ref bean="oracleLobHandler" />
		</property>
	</bean>
	<bean
		id="sessionFactory"
		class="com.landray.kmss.sys.config.loader.KmssHibernateLocalSessionFactoryBean">
		<property name="configurationClass">
			<value>com.landray.kmss.sys.config.loader.HibernateConfiguration</value>
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">
					${hibernate.dialect}
				</prop>
			</props>
		</property>
		<property name="dataSource">
			<ref bean="dataSource" />
		</property>
		<property name="lobHandler">
			<ref bean="oracleLobHandler" />
		</property>
	</bean>

 

在web.xml中配置兩個hibernate filter,分別管理這兩個sessionFactory,來實現延時加載:

 

<filter>
		<filter-name>hibernateFilter</filter-name>
		<filter-class>
			org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
		</filter-class>
		  <init-param>  
               <param-name>sessionFactoryBeanName</param-name>  
               <param-value>sessionFactory</param-value>  
         </init-param>  
         <init-param>  
             <param-name>singleSession</param-name>  
             <param-value>true</param-value>  
         </init-param>  
         <init-param>  
             <param-name>flushMode</param-name>  
             <param-value>AUTO</param-value>  
         </init-param>  
	</filter>
	<filter>
		<filter-name>hibernateFilterAssist</filter-name>
		<filter-class>
			org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
		</filter-class>
		  <init-param>  
               <param-name>sessionFactoryBeanName</param-name>  
               <param-value>sessionFactoryAssist</param-value>  
         </init-param>  
         <init-param>  
             <param-name>singleSession</param-name>  
             <param-value>true</param-value>  
         </init-param>  
         <init-param>  
             <param-name>flushMode</param-name>  
             <param-value>AUTO</param-value>  
         </init-param>  
	</filter>

 

 至此,兩個sessionFactory均可以實現延時加載了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章