我遇到Spring-Boot-starter版本1.5.9-RELEASE的问题 我使用不同的CrudRepository和服务声明了多个事务管理器。 然后我用这个顺序声明@transactionnal方法:
第一次主要交易
Transactional(value = "innolaTransactionManager", readOnly = false, propagation = Propagation.REQUIRED)
public void integrateLdFilesData() {
然后在其中调用此方法:
// Create transaction
DmTransaction transaction = transactionService.processTransaction(jacket.getTransactionNumber());
然后我们输入一个新方法:
@Transactional(readOnly = false, propagation = Propagation.REQUIRED, transactionManager = "dcToolTransactionManager")
public DmTransaction processTransaction(String transactionNumber) {
Transaction t = this.transactionRepository.findTransactionBytransactionNumber(transactionNumber);
return this.createTransaction(t);
}
然后我想要一个requires_new传播,但是这里我的事务永远不会在这个方法结束时提交
@Override
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW, transactionManager = "innolaTransactionManager")
public DmTransaction createTransaction(Transaction transaction) {
(...)
dmTransaction = dmTransactionRepository.save(dmTransaction);
// Create objects in database
return dmTransaction;
我们通过登录jpa orm来调试这种情况。
我们想出的唯一解决方案是在integrateLdFilesData方法和删除第三个方法createTransaction之后直接使用requires_new更改方法processTransaction。
我认为因为我们正在以某种方式使用2 transactionManager Spring丢失的事务生命周期,即使我们放置requires_new也不会提交。
你怎么看?