码迷,mamicode.com
首页 > Web开发 > 详细

Hibernate性能优化之SessionFactory重用

时间:2015-07-07 11:00:14      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

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

重用前:

技术分享

重用后:

技术分享


记录,为更好的自己!

Hibernate性能优化之SessionFactory重用

标签:

原文地址:http://www.cnblogs.com/ym123/p/4626246.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!