Spring Boot 樂觀鎖加鎖失敗 - 集成AOP


Spring Boot with AOP

手頭上的項目使用了Spring Boot, 在高並發的情況下,經常出現樂觀鎖加鎖失敗的情況(OptimisticLockingFailureException,同一時間有多個線程在更新同一條數據)。為了減少直接向服務使用者直接返回失敗結果的情況,可以使用這種方式解決這個問題:

  • 捕獲到OptimisticLockingFailureException之后,嘗試一定次數的重試。超過重試次數再報錯
  • 為了不修改原有的業務方法的代碼,使用AOP來實現錯誤處理功能

先通過一個RESTFul應用看看Spring Boot怎么用AOP,之后再來處理樂觀鎖加鎖失敗的問題。關於怎么用Spring Boot創建RESTFul應用不在這里細說了。

1.Maven依賴包

 1     <dependencies>
 2         <dependency>
 3             <groupId>org.springframework.boot</groupId>
 4             <artifactId>spring-boot-starter-web</artifactId>
 5             <version>1.2.6.RELEASE</version>
 6         </dependency>
 7         <!-- AOP的依賴包-->
 8         <dependency>
 9             <groupId>org.springframework.boot</groupId>
10             <artifactId>spring-boot-starter-aop</artifactId>
11             <version>1.2.6.RELEASE</version>
12         </dependency>
13 
14         <dependency>
15             <groupId>junit</groupId>
16             <artifactId>junit</artifactId>
17             <scope>test</scope>
18             <version>4.12</version>
19         </dependency>
20     </dependencies>

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已經生效了。

 源代碼地址:http://files.cnblogs.com/files/leolztang/sb.aop.tar.gz

 第二部分在這里:http://www.cnblogs.com/leolztang/p/5450316.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM