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

    重用前:

    重用后:


    记录,为更好的自己!

  • 相关阅读:
    Html禁止粘贴 复制 剪切
    表单标签
    自构BeanHandler(用BeansUtils)
    spring配置中引入properties
    How Subcontracting Cockpit ME2ON creates SD delivery?
    cascadia code一款很好看的微软字体
    How condition value calculated in sap
    Code in SAP query
    SO Pricing not updated for partial billing items
    Javascript learning
  • 原文地址:https://www.cnblogs.com/ym123/p/4626246.html
Copyright © 2011-2022 走看看