gpt4 book ai didi

java - 如何始终拦截 Spring 4.x 事务

转载 作者:行者123 更新时间:2023-11-30 02:19:58 32 4
gpt4 key购买 nike

我们使用 Spring 4.x、Hibernate 5.x、Spring-Data 1.11,目前我们有一个扩展了 org.hiberate.EmptyInterceptor 的 SQL 拦截器,我们基本上手动将其连接在使用 HibernateInterceptor.setInterceptor 启动 Web 请求。我们还有通过 Spring 任务调度程序在后台运行的作业。它们启动自己的事务,显然没有附加拦截器。我现在想做的是找到一种方法在所有情况下拦截Spring的@Transactional。

我已经研究了 TransactionInterceptor@TransactionalEventListener ,到目前为止还没有让它们中的任何一个工作,并且很难弄清楚当前考虑的是什么Spring 的最佳实践。

所以基本上我们要解决的问题是,事务结束时我们需要知道它是失败还是成功。

那么 Spring 的当前最佳实践是什么,可以始终获取提交前/提交后事件,以便我们可以根据需要进行响应?

编辑

意识到 @TransactionalEventListener 无法工作,因为我们没有使用 Spring 事件,所以这只是我对其真正作用的误解。

最佳答案

一种方法是创建一个简单的方面,例如:

@Aspect
@Component
public class AfterTransactionalAspect {

@After("@annotation(Transactional)")
public void cleanupAfterTransaction(JoinPoint joinPoint) throws Throwable {
// ... Do cleanup work here
}

另一个好方法(如果您使用 Spring 指定的事件)是使用 @TransactionalEventListener

您确定使用 ApplicationEventPublisher 来发布事件吗?您确定您的配置上有 @EnableTransactionManagement@TransactionalEventListener 位于公共(public)方法上,TransactionTemplate 已设置,使用 @Transactional 在方法上发布事件发生?

关于java - 如何始终拦截 Spring 4.x 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47164934/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com