spring对hibernate多数据源均实现延时加载

来源:互联网 发布:校园表白墙php源码 编辑:程序博客网 时间:2024/05/15 07:38

     最近在优化公司的系统的时候mysql数据库采用了读写分离策略,同样的sessionFactory要配置两个,但原有的项目中大量应用了hibernate的延时加载,在调试的时候才发现,无论如何都不能同时实现两个sessionFactory的延时加载,后来通过翻阅资料和阅读源码,终于找到了解决方案:

两个sessionFactory的在spirng配置如下:

 <beanid="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><beanid="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均可以实现延时加载了。