我有一个带有@Component
注释的@Transactional
课程。
在onApplicationEvent
方法中,我在db中保存相同的数据,之后我调用System.exit(0)
。
但是数据没有保存,我想检查数据保存的时间。
我使用TransactionSynchronizationManager.isActualTransactionActive()
但总是如此。
如果交易完成,我如何检查安全?
答案 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
注释,并在事务提交后调用它。 (如果当然发布了事件)