【问题标题】:Spring 3.x and hibernate 4.x transaction management issue using @TransactionalSpring 3.x 和 hibernate 4.x 使用@Transactional 的事务管理问题
【发布时间】:2014-02-02 07:41:01
【问题描述】:

我正在使用 Spring 3.0 和 hibernate 4.x,但我在事务管理方面遇到了问题。我在服务层使用@Transactional注解,但是将大量数据保存到数据库中需要很长时间。

这是我的事务管理器:

<tx:annotation-driven />
<bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

我正在使用这行代码插入数据:

sessionFactory.getCurrentSession().save(deal);

如果有人有解决方案,请帮助我。

【问题讨论】:

  • 有插入或更新操作吗?
  • 一般解决方案是批量插入:stackoverflow.com/questions/9718305/…
  • 我正在向数据库中插入数据。
  • 您能粘贴您的事务管理器和连接池配置吗?

标签: java spring hibernate spring-mvc transactions


【解决方案1】:

@Transactional 不对您的表现负责。 首先对大量数据使用批处理如下

int i = 0;
for(Deal deal : deals)
    session.save(deal);
    if ( i % 20 == 0 ) { //20, same as the JDBC batch size
        //flush a batch of inserts and release memory:
        session.flush();
        session.clear();
    }
   i++; 
}
session.flush();
session.clear();

阅读更多关于章节13. Batch processing

有时不是查询本身导致速度变慢 - 由于事务隔离和锁定,在表上运行的另一个查询很容易插入以减慢速度。 阅读更多关于这个外部因素的信息

link1

innodb_buffer_pool_size=614M

too many indexes?

Primary Key Genration

Why is MySQL InnoDB insert so slow?

希望对你有所帮助

【讨论】:

    猜你喜欢
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    相关资源
    最近更新 更多