Spring不提交事务

时间:2014-09-19 12:41:12

标签: java spring spring-transactions

我在我的项目中做过类似的事情。 我手动回滚事务,因为我已插入try-catch块并在catch块中手动回滚事务。 现在我从method1调用method2,我在method2()中将对象保存到数据库,但它没有将对象保存到数据库。

@Transactional(readOnly = false, propagation = Propagation.REQUIRED, rollbackFor=Throwable.class)
@Scheduled(cron = "0 5 16 * * ?")
public void method1() {

try{
---try block---
}
catch(Throwable t){
TransactionAspectSupport.currentTransactionStatus()
                .setRollbackOnly();
method2();
}
}

@Transactional(readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
public void method2() {
---saving object to database----
someService.update(object);
}

我只是想知道在method1()的faliure上将method2()中的对象保存为可能的解决方案。

提前完成。

1 个答案:

答案 0 :(得分:0)

我相信一旦事务被回滚(就像你在调用method2()之前那样)事务就完成了(就像在kaput中一样)并且你不能继续使用它并期望提交。这需要是一个新的交易(例如程序化):

// transactionManager is your platorm transaction manager usually injected
TransactionTemplate transactionTempate = new TransactionTemplate(transactionManager);

transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);

transactionTemplate.execute(new TransactionCallbackWithoutResult() {
            @Override
            protected void doInTransactionWithoutResult(TransactionStatus arg0) {
                method2();
            }
        });