`
longgangbai
  • 浏览: 7272517 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate事务缓存优化

阅读更多

 

hibernate优化

 

session控制

 为了避免session创建的开销,需要对session的创建进行控制

 当前行为:

  使用ThreadLocal的方式控制session的创建

  使用filter的方式创建和关闭session

  尚未配置filter

   此行为仅仅使用web开发中应用。

 

事务控制

    针对hibernate由三种dao操作 find save flush

    find即查询不需要开事务,所以可以考虑针对查询不使用事务控制

    针对saveOrUpdate使用事务

    现在事务提交是在filter结束的时候去做

    但有一些action中是不需要事务的,频繁开关事务可能会带来一定的系统开销

    当前测试使用和不使用事务进行查询测试结果(根据ID查询记录100次时间比较)

        不开事务 421ms

        打开事务 516ms

    事务的开关最好限定在方法内部,可以考虑在service方法中开关事务,可以避免这个问题

    session关闭和事务提交的时候,hibernate会主动调用flush方法进行数据库同步

    所以在当前项目中不需要关心flush方法

 

事务实现选用和配置

 使用jdbc事务控制

 不选用jta作为事务的实现

  放弃理由

   当前测试服务器tomcat本身仅仅是个web server,并不支持jta  

  配置hibernate属性信息

   hibernate.transaction.factory_class net.sf.hibernate.transaction.JTATransactionFactory

              net.sf.hibernate.transaction.JDBCTransactionFactory

  jta的好处

   JTA提供了跨Session的事务管理能力

   为以后扩展留下了选择空间

  实现

   单一的增删改操作不需要调用session.beginTransaction()等方法

 

   针对多条记录的修改使用下面的方式调用api

   UserTransaction ut = (UserTransaction)(new InitialContext().lookup("java:comp/UserTransaction"));

   ut.begin();

         //.....

         ut.commit();

 

          使用下面的方式也可以同样实现事务控制,但因为hibernate内部同样调用上面的api实现

          处于节省资源的想法,不建议使用

 

   Transaction tx = session.beginTransaction();

   tx.commit();

 

   以后可以考虑使用springaop实现替换当前实现  

 

  tomcat中的配置

   <Resource name="UserTransaction" auth="Container" type="javax.transaction.UserTransaction"/>

      <ResourceParams name="UserTransaction">

      <parameter>

    <name>factory</name>

    <value>org.objectweb.jotm.UserTransactionFactory</value>

      </parameter>

      <parameter>

       <name>jotm.timeout</name>

       <value>60</value>

      </parameter>

      </ResourceParams>             

 

分页控制

 

 通过criteria. setFirstResult/setMaxResults方法可以限制一次查询返回的记录范围

延迟加载

 

 lazy_load

 所有有关数据关联(一对多,多对多等)的映射都需要指定延迟加载

 因为当前系统的session关闭是在filter里面做的,所以不需要控制关联对象的加载

 在特殊的情况下,比如session关闭后获取关联对象

 可以在session关闭前调用Hibernate.initialize()API获取关联对象

 

缓存选用及配置管理

 

 当前选用EHCache作为第二层的缓存(第一层为数据库缓存)

 由于EHCache不支持分布式,所以将来可以考虑使用jgroup实现分布式

 针对系统内大部分的dao操作使用只读(read)

分享到:
评论

相关推荐

    马士兵hibernate学习笔记(原版)

    目录 课程内容 1 HelloWorld 2 Hibernate原理模拟 - 什么是O/R Mapping以及为什么... 4 一级缓存和二级缓存和査询缓存(面试题)(详见hibernate_3000_Hibernate_3KindsOf_Cache) 5 事务并发处理(面试的意义更大)

    Hibernate实战(第2版)高清

    你将直接深入到Hibernate的富编程模型之中,贯穿映射、查询、抓取策略、事务、会话、缓存以及更多其他内容。书中图文并茂地介绍了数据库设计和优化技术的实践。在本书中,作者详尽介绍了具有Java持久化2.1标准的...

    精通hibernate

    Hibernate入门 OR映射技术 通过Hibernate API操纵数据库 检索策略和方式 数据库事务、并发、缓存与性能优化 高级配置。

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     20.5 Java应用通过Hibernate API声明JDBC事务  20.5.1 处理异常  20.5.2 Session与事务的关系  20.5.3 设定事务超时  20.6 Java应用通过Hibernate API声明JTA事务  20.7 Java应用通过JTA API声明JTA事务  ...

    Hibernate实战(第2版 中文高清版)

     10.3.2 使用Hibernate非事务地工作   10.3.3 使用JTA的可选事务   10.4 小结   第11章 实现对话   11.1 传播Hibernate Session   11.1.1 Session传播的用例   11.1.2 通过线程局部传播   11.1.3 ...

    Hibernate基础教程

    文档内容包括:Hibernate入门、OR映射技术、通过Hibernate API操纵数据库、检索策略和方式、数据库事务、并发、缓存与性能优化、高级配置

    Hibernate java对象持久化技术.ppt

    Hibernate入门 OR映射技术 通过Hibernate API操纵数据库 检索策略和方式 数据库事务、并发、缓存与性能优化 高级配置

    hibernate+spring+struts2

    (2)运用struts1.2+hibernate+spring 框架,数据库连接池,事务管理; (3)Struts 应用国际化,Struts 标签库与Tiles框架, JSTL标签库,Spring IOC; (4)采用优化性能技术,采用oscache缓存,freemarker静态页面生成; (5)...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     20.5 Java应用通过Hibernate API声明JDBC事务  20.5.1 处理异常  20.5.2 Session与事务的关系  20.5.3 设定事务超时  20.6 Java应用通过Hibernate API声明JTA事务  20.7 Java应用通过JTA API声明JTA事务  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     20.5 Java应用通过Hibernate API声明JDBC事务  20.5.1 处理异常  20.5.2 Session与事务的关系  20.5.3 设定事务超时  20.6 Java应用通过Hibernate API声明JTA事务  20.7 Java应用通过JTA API声明JTA事务  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     20.5 Java应用通过Hibernate API声明JDBC事务  20.5.1 处理异常  20.5.2 Session与事务的关系  20.5.3 设定事务超时  20.6 Java应用通过Hibernate API声明JTA事务  20.7 Java应用通过JTA API声明JTA事务  ...

    hibernate教程

    手把手教会你使用hibernate Hibernate入门 OR映射技术 通过Hibernate API操纵数据库 检索策略和方式 数据库事务、并发、缓存与性能优化 高级配置

    低清版 大型门户网站是这样炼成的.pdf

    第5章 hibernate 3持久化技术实践与性能优化 271 5.1 操作持久化对象的常用方法介绍 271 5.1.1 使用session的begintransaction()方法 272 5.1.2 使用session的close()方法 273 5.1.3 使用session的connection()...

    运用struts1.2+hibernate+spring 框架完整购物商城项目(内含sql文件)

    一个J2EE购物网站的实现 运用struts1.2+hibernate+spring 框架,数据库连接池,事务管理;Struts 应用国际化,Struts 标签库与Tiles框架, JSTL标签库,Spring IOC。 采用优化性能技术,采用oscache缓存,freemarker静态...

    Java Web程序设计教程

    10.1hibernate事务与并发 208 10.1.1什么是事务 208 10.1.2hibernate中的事务处理 209 10.1.3在hibernate中使用jta事务 210 10.1.4并发控制 211 10.2hibernate缓存 213 10.2.1缓存的工作原理 213 10.2.2应用...

    Java求职面试宝典各大公司常考知识点

    1.9. hibernate如何管理缓存 4 1.10. 使用Hibernate的优点: 6 1.11. Hibernate是如何延迟加载? 6 1.12. Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系) 6 1.13. Hibernate的查询方式 7 1.14. 如何...

    zxframe demo.rar

    支持缓存融入事务,业务异常不提交缓存数据 *.支持通用分布式锁 *.支持全服务热更新配置 *.支持服务运行状态和日志查询,便于快速定位问题 --&gt;SpringCloudConfigServer高可用成本较高,运维成本提升 --&gt;本功能...

    1000道 互联网Java架构师面试题 485页_.pdf

    2. 性能问题:MyBatis的性能问题较多,需要开发者对SQL语句和缓存进行优化。 MyBatis框架适用场合 1. 复杂的数据库操作:MyBatis适合复杂的数据库操作,例如多表关联、子查询等。 2. 高性能要求:MyBatis适合高...

Global site tag (gtag.js) - Google Analytics