春季:如何在输入@AfterReturning建议之前提交交易



我有一个事务性服务类:

@Service
@Transactional(...)
public class MyService() {
public void myFunc() { 
// some code
}
}

还有以下方面:

@Aspect
public class MyAspect() {
@AfterReturning(value = "execution(...") // pointcut matching myFunc()'s signature
public void doSomethingAfterMyFunc() { 
// some code
}
}

我面临的问题是,在输入@AfterReturning建议时,执行myFunc()创建的事务尚未提交,因此建议共享相同的事务。从我所读到的内容来看,这种行为是意料之中的,但出于我的目的,我需要相反的情况 - 有没有办法在输入建议之前提交myFunc()的交易?

提前感谢!

这是由于@Transactional方面而发生的,因此您的代码中有 2 个方面,因此您必须按照 https://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/aop.html#aop-ataspectj-advice-ordering 说明设置Order

在代码中,您可以设置自己的方面顺序MyAspect如下所示:

@Aspect
@Order(1)
public class MyAspect() {
//your code here
}

通过将其顺序指定为 1,并且由于规则是:

在从连接点离开的路上,具有最高订单价值的建议 首先执行。

@Transactional方面将在您的之前执行,因此myFunc将被提交,然后doSomethingAfterMyFunc将被执行。

最新更新