设为首页 加入收藏

TOP

Hibernate性能优化之SessionFactory重用
2015-07-16 12:55:38 来源: 作者: 【 】 浏览:3
Tags:Hibernate 性能 优化 SessionFactory 重用

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。


在我自己的项目中自己实现了一个重用类,可以作为参考:



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命令进行了简单的性能测试,性能提升一倍,效果还是非常明显的。


重用前:



重用后:



】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Java编程思想学习笔记——泛型 下一篇Java线程和线程池

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: