SpringAOP @AfterThrowing 正常执行但未提交

使用AOP记录日志的时候@AfterThrowinng正常执行  sql已输出,数据未提交到数据库

  最近开发需使用AOP方式实现日志记录,一开始未加上@Transactional注解,但是会提示will not be manager by spring,网上说在service上加上@Transactional即可。可是我在service上加上了该注解没效果。最后在controller上加上就有效果了。

  but @AfterThrowing异常通知也可正常执行,sql已经打印出,记录的数据没有正常提交数据库

  查找原因及网上百度,原因是:Spring事务是通过AOP实现的,自己写的AOP与事务AOP存在执行顺序问题,如果事务AOP先执行了,@AfterThrowing中数据则无法提交。解决办法为@Aspect方法实现org.springframework.core .Ordered接口或使用@Order注解,推荐使用注解方式。

//实现接口方式
@Aspect
@Component
public class OperLogAspect implements Ordered {
private IExceptionLogService exceptionLogService;

    @Override
    public int getOrder() {
        return 1;
    }
}//注解的方式(数字越小优先级约越高)

 

@Order(1)
@Aspect
@Component
public class OperLogAspect { ... }

 

 

posted @ 2022-03-31 14:58  灯下一个人  阅读(305)  评论(0)    收藏  举报