Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查到数据库的事务是否在Spring中完成_Java_Spring - Fatal编程技术网

Java 检查到数据库的事务是否在Spring中完成

Java 检查到数据库的事务是否在Spring中完成,java,spring,Java,Spring,我有一个带有@Transactional注释的@Component类。 在ApplicationEvent的方法中,我将相同的数据保存在db中,然后调用系统。退出(0) 但是数据没有保存,我想检查数据何时保存 我使用TransactionSynchronizationManager.isActualTransactionActive(),但始终为真 如何在交易完成时检查保险柜?1) 不确定它是最新的,但您需要一个事务拦截器,如下所示: 然后听“交易完成后”(…) (二) 您可以简单地通过try

我有一个带有
@Transactional
注释的
@Component
类。 在ApplicationEvent的
方法中,我将相同的数据保存在db中,然后调用
系统。退出(0)

但是数据没有保存,我想检查数据何时保存

我使用
TransactionSynchronizationManager.isActualTransactionActive()
,但始终为真

如何在交易完成时检查保险柜?

1) 不确定它是最新的,但您需要一个事务拦截器,如下所示:

然后听“交易完成后”(…)

(二) 您可以简单地通过try-catch包装DB调用方法,如果调用方法无异常退出,则事务完成。(以防内部未捕获异常)

将调用DB save的java代码包装如下:

try{
    saveData()...

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

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

我解决了另一个服务类的问题,在该服务类中,我将数据保存在DB中,并且该服务是事务性的。在
@Component
类中,我调用了服务方法。

您的数据层使用的是什么库?带Hibernate的PostgreSql。但我只想为一项工作执行此操作。不是所有的项目。所以,我认为拦截器不是最好的解决方案。我不理解
try-catch
解决方案。在我的回答中回答了我的问题。我尝试了它,但在系统中不起作用。在数据库中插入之前调用exit()。我认为您有一个非常根本的问题:您的@Component不在上下文中。即使在上面加上注释。开始检查在没有System.exit的情况下是否一切正常。你可能会发现它也不起作用。