最近发现一个小问题,在自己的service中使用了声明式事务,并且在service前后使用了自定义AOP来记录日志,发现在service中发生异常时,连带自定义AOP中的记录log操作也会回滚,尝试在自定义AOP的方法中添加声明式事务来设置传播性(改成不启用事务以及启用新事务),然而均不起作用。后来想想两个都是用AOP来实现,执行起来的顺序估计有问题。
查找资料发现可以对多个AOP设置执行顺序,这种情况只要让自定义AOP在前,不包含在事务中,应该就能解决。
可以设置order参数,值越小,优先级越高,如果不设置,就是优先级最小。
比如:
设置事务的优先级 设置成2
- <!-- 采用@Transactional注解方式使用事务 -->
- annotation-driven transaction-manager="txManager" order="2"/>
设置自定义AOP的优先级 设置成1
经测试解决问题。