当前位置: 代码迷 >> J2EE >> 【求方向】hibernate 并发、批量安插数据
  详细解决方案

【求方向】hibernate 并发、批量安插数据

热度:54   发布时间:2016-04-22 01:00:09.0
【求方向】hibernate 并发、批量插入数据
环境:
   
  数据库:本机:mysql 5.5.2 集群 cluster版本7.2.5
  链接池:c3p0
  框架:S2SH


  现有一批量保存的功能、条数在200条左右、单机测试是534ms左右
  而发布到部署的集群环境中、200多条数据竟然等了1分钟、
   
  并发人数最多50+人 (但都不是批量保存的动作、而是其他的正常动作)

  监控数据库的时候 进程在20左右

  我批量保存代码如下、

 
Java code
     SessionFactory sf = hibernateTemplate.getSessionFactory();          //session不是从事务中获取的、自己新创个、          Session session = sf.openSession();                              session.getTransaction().begin();          long s = System.currentTimeMillis();          //循环保存、累积一起提交事务 time++          session.getTransaction().commit();                    long e = System.currentTimeMillis();          System.out.println("共执行了"+time+"行数据用时:"+(e-s)+"ms");                      session.flush();          session.clear();          session.close();   


  spring配置数据源


 
XML code
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">        <property name="sessionFactory" ref="sessionFactory"/>        <property name="cacheQueries" value="true"/>        <property name="fetchSize" value="100"/>        <property name="maxResults" value="10000"/>    </bean>    <bean id="dataSource"          class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">        <property name="driverClass">            <value>${c3p0.driverClass}</value>        </property>        <property name="jdbcUrl">            <value>${c3p0.jdbcUrl}</value>        </property>        <property name="user">            <value>${c3p0.user}</value>        </property>        <property name="password">            <value>${c3p0.password}</value>        </property>        <property name="minPoolSize">            <value>5</value>        </property>        <property name="maxPoolSize">            <value>50</value>        </property>        <property name="initialPoolSize">            <value>5</value>        </property>        <property name="maxIdleTime">            <value>10</value>        </property>        <!--最大连接数后一次取多少-->        <property name="acquireIncrement">            <value>5</value>        </property>        <property name="acquireRetryAttempts">            <value>30</value>        </property>        <property name="acquireRetryDelay">            <value>1000</value>        </property>        <property name="testConnectionOnCheckin">            <value>true</value>        </property>        <property name="automaticTestTable">            <value>conn_test</value>        </property>        <property name="idleConnectionTestPeriod">            <value>60</value>        </property>        <property name="checkoutTimeout">            <value>100</value>        </property>        <property name="numHelperThreads">            <value>5</value>        </property>        <property name="breakAfterAcquireFailure">            <value>false</value>        </property>    </bean>
  相关解决方案