Hibernate性能优化之SessionFactory重用
2015-07-07 10:32
399 查看
Hibernate优化的方式有很多,如缓存、延迟加载以及与SQL合理映射,通过对SessionFactory使用的优化是最基础的。
SessionFactory负责创建Session实例,Session相当于JDBC里的Connection。
SessionFactory的创建
SessionFactory是通过Configuration来构建的,Configuration会根据配置信息来构建SessionFactory。
SessionFactory中保存了对应当前数据库配置的所有映射关系,还负责维护二级缓存和Statement池,因此SessionFactory的创建过程是非常耗时的。
Hibernate建议在代码中设计SessionFactory的重用策略,并且SessionFactory默认是线程安全的,允许多个线程并发调用。
一般系统中只需创建一个SessionFactory实例,可以避免每次重新创建的时间,还可以更好的共享二级缓存。
SessionFactory的重用
NetBeans提供默认的HibernateUtil.java来重用SessionFactory。
在我自己的项目中自己实现了一个重用类,可以作为参考:
这个地方设计时要考虑多线程的环境,因此使用内部类来支持多线程。
性能测试
对于重用前和重用后用ab命令进行了简单的性能测试,性能提升一倍,效果还是非常明显的。
重用前:
![](http://images0.cnblogs.com/blog2015/693632/201507/071030349713606.png)
重用后:
![](http://images0.cnblogs.com/blog2015/693632/201507/071030440964785.png)
记录,为更好的自己!
SessionFactory负责创建Session实例,Session相当于JDBC里的Connection。
SessionFactory的创建
SessionFactory是通过Configuration来构建的,Configuration会根据配置信息来构建SessionFactory。
SessionFactory中保存了对应当前数据库配置的所有映射关系,还负责维护二级缓存和Statement池,因此SessionFactory的创建过程是非常耗时的。
Hibernate建议在代码中设计SessionFactory的重用策略,并且SessionFactory默认是线程安全的,允许多个线程并发调用。
一般系统中只需创建一个SessionFactory实例,可以避免每次重新创建的时间,还可以更好的共享二级缓存。
SessionFactory的重用
NetBeans提供默认的HibernateUtil.java来重用SessionFactory。
在我自己的项目中自己实现了一个重用类,可以作为参考:
public class HibernateSessionFactory { private final Configuration configuration; private final ServiceRegistry serviceRegistry; private final SessionFactory sessionFactory; private HibernateSessionFactory() { configuration = new Configuration().configure(); serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); sessionFactory = configuration.buildSessionFactory(serviceRegistry); } public Session getSession() { return sessionFactory.openSession(); } private static class SingletonHolder { private final static HibernateSessionFactory INSTANCE = new HibernateSessionFactory(); } public static HibernateSessionFactory getInstance() { return SingletonHolder.INSTANCE; } }
这个地方设计时要考虑多线程的环境,因此使用内部类来支持多线程。
性能测试
对于重用前和重用后用ab命令进行了简单的性能测试,性能提升一倍,效果还是非常明显的。
重用前:
![](http://images0.cnblogs.com/blog2015/693632/201507/071030349713606.png)
重用后:
![](http://images0.cnblogs.com/blog2015/693632/201507/071030440964785.png)
记录,为更好的自己!
相关文章推荐
- 可以在自己本机修改域名
- ubuntu12.04网络配置——桥接方式配置静态IP
- Android 检查设备是否存在 导航栏 NavigationBar
- altium基本规则的设定
- 关于开发环境的安装和配置
- rabbitmq
- autolayout - sizeClass - Masonry - 3
- kernel启动流程
- The line endings in the following file are not consistent.
- ubunut jdk 配置
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:存储过程数据操作
- Android Studio快捷键
- DOM 解析器 使用
- ios学习笔记:iosGCD的使用
- readline与rlwrap的安装
- NTFS For Mac如何注册激活
- Linux常用命令(vim+bash+hadoop)
- Java集合类详解
- 类似 刷新的时候 那个转圈圈 动画
- ROS学习手记 - 5 理解ROS中的基本概念_Services and Parameters