最近在优化公司的系统的时候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均可以实现延时加载了。
分享到:
相关推荐
综上所述,Spring获取和使用数据源是通过配置不同的数据源类型、连接池,以及在需要的地方注入数据源来实现的。在实际开发中,还需要根据项目需求选择合适的数据源,并考虑性能、稳定性和资源管理等因素。对于初学者...
- Hibernate支持延迟加载(Lazy Loading),提高性能,只在需要时加载数据。 - 使用SessionFactory和Session接口进行数据库会话管理,支持HQL(Hibernate Query Language)和SQL进行查询。 3. **Struts2框架**: ...
5. **多数据源支持**:允许在一个应用中连接并操作多个数据库,提高了灵活性。 结合这两个框架,开发者可以构建出高效、松散耦合的Java应用。Spring 2.5 提供了对Hibernate的集成支持,可以方便地通过Spring的事务...
Hibernate通过以下方式实现延迟加载: - **使用懒加载代理**:对于一对多或多对多的关系,Hibernate会在需要的时候动态创建代理对象。 - **OpenSessionInView模式**:这是一种解决懒加载异常的有效方案,通过确保...
5. **配置dataSource和SessionFactory**:在Spring配置文件中,你需要配置数据源(dataSource)和SessionFactory,这样可以将Hibernate的配置整合到Spring中,同时可以移除hibernate.cfg.xml文件,让Spring管理...
10. **性能优化**:整合Spring和Hibernate后,我们可以通过配置和最佳实践优化性能,如批量操作、延迟加载、缓存策略等。 总的来说,Spring整合Hibernate能带来更优雅的代码结构、强大的事务管理和灵活的数据库操作...
JPA2带来了许多改进,如支持双向一对多关联、延迟加载优化、查询注解增强等。而Hibernate4是JPA的一个流行实现,它提供了更丰富的功能,如第二级缓存、事务管理和事件监听器。 在Eclipse中创建Dynamic Web Project...
Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲地使用面向对象的编程思想来操纵数据库。 **1.2 Hibernate 工作原理** - **读取并解析配置...
2. 数据源配置:项目中应包含数据源的配置,用于连接数据库,可能在`persistence.xml`或Spring配置文件中。 3. 实体类(Entities):这些是与数据库表映射的Java类,使用JPA注解进行配置。 4. Repository接口:基于...
1. **配置 Spring 和 Hibernate**: 在 Spring 配置文件中引入 Hibernate 相关配置,如数据源、SessionFactory 等。 2. **事务管理**: 使用 Spring 的 PlatformTransactionManager 实现事务的统一管理,确保操作的...
它们提供了事务管理和数据源的便捷接入。 **三、Hibernate的查询方式** 1. **HQL(Hibernate Query Language)**:类似于SQL,但面向对象,支持条件查询、分页、连接查询和嵌套查询。 2. **QBC(Query By Criteria...
4.2版本引入了对JPA 2.1的支持,优化了性能,增强了对延迟加载(Lazy Loading)和缓存策略的处理。通过Hibernate,开发者可以将数据库操作封装到实体类中,降低了数据层和业务层的耦合。 SSH整合的主要目标是利用...
4. **配置Spring**:编写`applicationContext.xml`,配置数据源、事务管理器、DAO和Service Bean。 5. **实现DAO和Service**:编写数据访问对象(DAO)接口及其实现,以及业务逻辑层(Service)类。 6. **整合Struts...
2. **延迟加载(Lazy Loading)**:Hibernate 支持实体属性的懒加载,只有在真正需要数据时才会执行 SQL 查询,提高了性能。 3. **缓存机制**:Hibernate 内置了二级缓存,可以显著提高数据读取速度。 4. **查询语言...
此外,书中还会涉及Hibernate的性能优化技巧,如延迟加载、批处理和连接池配置,这些都是实际项目中必不可少的知识。同时,作者可能还会讨论Hibernate与其他技术的集成,如Spring框架的整合,以及如何在分布式环境下...
2. 集成Hibernate:配置Hibernate的主配置文件(hibernate.cfg.xml),定义数据源,实体类的映射文件(.hbm.xml或使用注解),并利用Spring管理SessionFactory。 3. 配置Struts2:编写struts.xml配置文件,定义...
5. **数据源配置**:在Spring配置文件中定义数据源(dataSource)和SessionFactory,这是连接数据库的关键。通过这种方式,可以将Hibernate的配置统一管理,避免在各个DAO中重复配置。 6. **HibernateDAOSupport类*...
通过本课程的源代码,你可以逐步了解如何配置Spring Boot项目,集成Spring 6框架,以及如何使用Hibernate进行数据访问。这将帮助你构建完整的端到端应用,包括RESTful API、数据库交互和错误处理。同时,你将掌握...
- **延迟加载**:介绍Hibernate如何实现延迟加载来优化查询效率。 ### Database & JDBC #### 数据库连接管理 - **事务处理**:探讨JDBC环境下如何正确管理和控制事务,确保数据一致性。 - **资源释放**:正确关闭...
3. Spring的AOP允许在不修改源代码的情况下,对方法进行拦截,实现如日志记录、事务管理等功能。 4. Spring的DI使得对象间的依赖关系可以通过配置来解耦,提高代码的灵活性和可测试性。 使用Spring的原因在于其强大...