检查Spring中是否完成了对数据库的事务

时间:2018-01-15 10:57:06

标签: java spring

我有一个带有@Component注释的@Transactional课程。 在onApplicationEvent方法中,我在db中保存相同的数据,之后我调用System.exit(0)

但是数据没有保存,我想检查数据保存的时间。

我使用TransactionSynchronizationManager.isActualTransactionActive()但总是如此。

如果交易完成,我如何检查安全?

3 个答案:

答案 0 :(得分:2)

我使用另一个服务类来解决问题,我将数据保存在数据库中,此服务为@Transactional。在@Component课程中,我调用了服务方法。

答案 1 :(得分:0)

1) 不确定它是最新的,但你需要一个事务拦截器,就像这样: https://docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/Interceptor.html

并听取afterTransactionCompletion(...)

2) 您可以通过try-catch简单地包装DB​​调用方法,如果调用方法退出而没有异常 - 事务已完成。 (如果你没有在里面捕获异常)。

包装调用DB保存的java代码:

try{
    saveData()...

    //transaction was OK here, I can System.exit
    System.exit();
}catch(Exception e){
     //transaction failed, I need so something
     soSomething();
}

答案 2 :(得分:0)

你听什么样的ApplicationEvent?如果它是由您自己的代码生成的自定义事件(通过ApplicationEventPublisher),那么您可以在事件处理方法上添加org.springframework.transaction.event.TransactionalEventListener注释,并在事务提交后调用它。 (如果当然发布了事件)