Spring Boot with AOP
手头上的项目使用了Spring Boot, 在高并发的情况下,经常出现乐观锁加锁失败的情况(OptimisticLockingFailureException,同一时间有多个线程在更新同一条数据)。为了减少直接向服务使用者直接返回失败结果的情况,可以使用这种方式解决这个问题:
- 捕获到OptimisticLockingFailureException之后,尝试一定次数的重试。超过重试次数再报错
- 为了不修改原有的业务方法的代码,使用AOP来实现错误处理功能
先通过一个RESTFul应用看看Spring Boot怎么用AOP,之后再来处理乐观锁加锁失败的问题。关于怎么用Spring Boot创建RESTFul应用不在这里细说了。
1.Maven依赖包
12 3 7 8org.springframework.boot 4spring-boot-starter-web 51.2.6.RELEASE 69 13 14org.springframework.boot 10spring-boot-starter-aop 111.2.6.RELEASE 1215 20junit 16junit 17test 184.12 19
2.创建切面定义类
请注意这里用到的几个标签都是必须的,否则没效果。
1 @Aspect 2 @Configuration 3 public class HelloAspect { 4 5 //切入点在实现类的方法,如果在接口,则会执行doBefore两次 6 @Pointcut("execution(* com.leolztang.sb.aop.service.impl.*.sayHi(..))") 7 public void pointcut1() { 8 } 9 10 @Around("pointcut1()")11 public Object doBefore(ProceedingJoinPoint pjp) throws Throwable {12 System.out.println("doBefore");13 return pjp.proceed();14 }15 }
3.在应用程序配置文件application.yml中启用AOP
spring.aop.auto: true
完成之后启动App,使用RESTFul客户端请求http://localhost:8080/greeting/{name}就可以看到控制台有输出"doBefore",说明AOP已经生效了。
源代码地址:
第二部分在这里: