SpringBoot手动提交事务
在 SpringBoot 项目中遇到这样一个问题,在一个方法中使用了事务注解,所以方法的事务会在整个方法执行完毕后才提交。
现在需要对方法内的某一事务单独先提交。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public class Test { @Transactional public void A() { B(); } public void B() { } }
|
代码如上。
一开始给 B 方法也加上事务注解。
1 2 3 4
| @Transactional(propagation = Propagation.REQUIRES_NEW) public void B() { }
|
使用 @Transactional(propagation = Propagation.REQUIRES_NEW)
注解,通过开启一个新事物,来让 B 方法的事务单独提交。
经过测试无效。
最终使用手动提交事务,解决此问题。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| public class Test { @Autowired private DataSourceTransactionManager transactionManager; @Transactional public void A() { B(); } public void B() { DefaultTransactionDefinition transactionDefinition = new DefaultTransactionDefinition(); transactionDefinition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); TransactionStatus transactionStatus = transactionManager.getTransaction(transactionDefinition); try { transactionManager.commit(transactionStatus); } catch (Exception e) { transactionManager.rollback(transactionStatus); } } }
|