[英]Using Spring Transaction with Mybatis batch
我有一個@Transactional
方法,該方法在一個通用的spring bean上調用另一個方法,該方法長期以來一直用於跨mappers執行batch
操作。 現在的問題是,如果@Transactional
方法中有錯誤 ,則不會回滾在batch
上執行的DML,因為它們是在不同的會話上執行的,並且是它自己的事務。
public class HamsterRepo{
...
@Autowired
BatchOperationBean<Hamsters> idioticBatchBean;
@Transactional
public void saveHamsters(List<Hamsters> hams){
idioticBatchBean.executebatch("saveHamsters", hams);
}
}
public class BatchOperationBean<T>{
@Autowired
SqlSessionFactory sqlFactory;
public void executebatch(String mapperId, List<T> ts){
SqlSession sqlSession =
this.sqlSessionFactory.openSession(ExecutorType.BATCH,
TransactionIsolationLevel.SERIALIZABLE);
try(sqlSession){
for(T t in ts){
sqlSession.update(mapperId , t);
}
sqlSession.commit();
// Clean Up stuff and Exception Handling...
}
}
}
現在,有沒有辦法關聯兩個Spring Tx and SqlSessionFactory
? 將注入SqlSession而不是工廠幫助嗎? 還是有辦法從Spring Tx獲取SqlSession? 還是Spring中無需SqlSesion即可跨映射器識別和執行查詢的一種方法?
PS:使用Spring 4.1.7,Mybatis:3.4.4,Mybatis-spring:1.3.1
看起來像鏈接Spring Transaction和Mybatis SqlSession的方式是SqlSessionTemplate
與Spring事務管理一起使用的線程安全,Spring管理的SqlSession,可確保使用的實際SqlSession是與當前Spring事務關聯的那個。 另外,它管理會話生命周期,包括根據Spring事務配置根據需要關閉,提交或回滾會話。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.