使用springMVC的事务处理多线程。
最近在做项目肚饿时候,用到多线程:批量迁移历史数据,(即将多个主机的数据文件,移动到另一台主机上,其中要使用到多线程)
模仿前辈的程序,把业务层实现后,开始进行事务处理。
使用DataSourceTransactionManager 类,
(1)在多线程的run方法中,创建事物状态,
DefaultTransactionDefinition def = new DefaultTransactionDefinition();// 获得事务状态
TransactionStatus status = transactionManager.getTransaction(def);
(2)在最后进行transactionManager.commit(status);
(3)期间若程序出现错误,会抛出异常,从而触发事务回滚。
throw new RuntimeException(e);
(4)在进行了业务层的事务处理后,还要对Dao层(数据库查询时)进行事务处理。(否则会出现错误,即主线程提前结束,多线程不能正常结束)
@Transactional(readOnly=true)
在上网查资料时看到一句话,有理:多线程关键是协调。
(5)多线程,有的主线程提前结束,而多线程还没有结束, 解决方法:
让主线程sleep()一段时间。但若sleep的时间不合理,会影响性能。