Spring:如何在输入@AfterReturning建议之前提交事务

时间:2017-09-12 11:25:39

标签: java spring service transactions aop

我有一个交易服务类:

@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()的事务?

提前致谢!

1 个答案:

答案 0 :(得分:2)

由于 <xs:simpleType name="AConstantHere"> <xs:restriction base="xs:string"> <xs:enumeration value="CONSTANT_VALUE_HERE"/> </xs:restriction> </xs:simpleType> 看点,这种情况正在发生,因此您的代码中有2个方面,因此您必须按照https://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/aop.html#aop-ataspectj-advice-ordering

的说明设置@Transactional

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

MyAspect

将其顺序指定为1,因为规则是:

  

在离开连接点的路上,具有最高Order值的建议   先被执行。

@Aspect @Order(1) public class MyAspect() { //your code here } Aspect将在您之前执行,因此@Transactional将被提交,然后myFunc将被执行。