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

    重用前:

    重用后:


    记录,为更好的自己!

  • 相关阅读:
    ComparatorUtil 防止空指针异常
    Java resource 读取解释,绝对路径和相对路径
    List -> Map 工具类,list转为map
    Idea debugger 无法启动-unable to open debugger port , java.net.SocketException "socket closed"
    js处理ajax返回的json数组
    ubuntu安装chkconfig.deb系统服务管理工具
    Ubuntu18.04更新源
    IDEA通过Git同步代码到Coding
    解决ERR Client sent AUTH, but no password is set
    PyCharm快捷键
  • 原文地址:https://www.cnblogs.com/ym123/p/4626246.html
Copyright © 2011-2022 走看看