使用hibernate批处理进行性能调整

时间:2015-12-09 07:24:30

标签: hibernate batch-processing

我正在尝试检索超过300,000条记录,并使用Hibernate批处理更新数据库中的记录。它花了大约30分钟。我怎样才能减少时间?

这是我的Hibernate配置:

<property nane="connection.provider_class">org.jasypt.hibernate.connectionprovider.EncryptedPasswordDriverManagerConnectionProvider</property> 
<property name="hibernate.connection.encryptor_registered_name">strongHibernateStringEncryptor</property>
<property name="hibernate.connection.driver_class">oracle.jdbc.pool.OracleDataSource</property>
<property name="hibernate.connection.url"></property>
<property name="hibernate.connection.username"></property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="hibernate.default_schema"></property>       
<property name="show_sql">true</property>          
<property name="hibernate.jdbc.batch_size">50</property>       
<property name="hibernate.order_inserts">true</property>   
<property name="hibernate.order_updates">true</property>    
<property name="hibernate.jdbc.batch_versioned_data">true</property>
<property name="hibernate.cache.use_query_cache">false</property>
<property name="hibernate.cache.use_second_level_cache">false</property>

我已经编写了2个Hibernate配置文件,用于连接2台服务器(Mock和UAT)。

我正在阅读字段定义表(FTD),它根据事务引用和进程号来维护字段名称及其值:

for (String srcTxn : bulkTxnSet) {
  Criteria crit = sesMock.createCriteria(FTD.class);
  crit.add(Restrictions.eq("txRefNo", srcTxn ));
  crit.add(Restrictions.eq("processId", "001"));

  // Here is updated code
  ScrollableResults items = crit.scroll();

  while ( items.next() ) {
    FTD e = (FTD)items.get(0);   
    sesUAT.save(e);    

    if ( ++count % 50 == 0 ) {    
      sesUAT.flush();
      sesUAT.clear();
    }   
  }
}

我需要从模拟服务器获取FTD表数据并将其保存在UAT服务器中。

0 个答案:

没有答案