Hibernate性能优化之SessionFactory重用

王朝学院·作者佚名  2016-05-28
窄屏简体版  字體: 小  |  中  |  大  |  超大  

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

重用前:

重用后:

记录,为更好的自己!

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航