retry是spring提供的異常重試框架,只需要引入如下依賴即可安心食用。
@enableretry:此註解用於開啟重試框架,可以修飾在springboot啟動類上面,也可以修飾在需要重試的類上org.springframework.retry
spring-retry
proxytargetclass:boolean型別,用於指明**方式【true:cglib**,false:jdk動態**】預設使用jdk動態**
@retryable
value:class型別,用於指定需要重試的異常型別,
include:class型別,作用於value類似,區別尚未分析
exclude:class型別,指定不需要重試的異常型別
maxattemps:int型別,指定最多重試次數,預設3
backoff:backoff型別,指明補償機制
@backoff
delay:指定延遲後重試,預設為1000l,即1s後開始重試 ;
multiplier:指定延遲的倍數
@recover
當重試次數耗盡依然出現異常時,執行此異常對應的@recover方法。
異常型別需要與recover方法引數型別保持一致,
recover方法返回值需要與重試方法返回值保證一致
springboot啟動類
//指明**方式為cglib**
@enableretry(proxytargetclass = true)
public static void main(string args) }
業務類
package com.example.retrystudy.service;
import lombok.extern.slf4j.slf4j;
import org.springframework.retry.annotation.backoff;
import org.springframework.retry.annotation.recover;
import org.springframework.retry.annotation.retryable;
import org.springframework.stereotype.service;
/** * @author hcq
* @date 2019/6/30 21:56
*/@service
@slf4j
public class retryserviceimpl implements retryservice,maxattempts = 5,backoff = @backoff(delay = 500,multiplier = 1))
public string retry()
@override
@recover
public string recover(runtimeexception e)
@override
public string handlerretry()
}
一、基於jdk動態**時,只**介面中的方法,所以需要注意以下事項二、基於cglib動態**時,可以**目標類所有可繼承方法
@retryable或者@recover修飾的方法必須可以被繼承(不能用final,private修飾)
@retryable與 @recover直接修飾在方法實現上
Python 踩坑記錄
1.浮點數判斷 工作中遇到類似下面邏輯判斷 i 1 while i 1.5 i i 0.1 print i在想象中i應該停止在1.5就不輸出了,但是實際的輸出結果是無限迴圈。這是因為在計算機的邏輯中,浮點數的儲存規則決定了不是所有的浮點數都能準確表示,有些是不準確的,只是無限接近。如0.1轉換為二進...
Java踩坑記錄
1.quartz整合spring框架service層物件注入為null解決方案 jobdetailfactorybean中注入的是乙個cn.itcast.quartz.hellojob實現類的全路徑,底層會反射建立出乙個hellojob的物件,但是該物件不是由spring管理的,所以業務層的物件無法...
SSD踩坑記錄
原github專案位址,借用大神的模型自己訓練ssd 1 error default maxpoolingop only supports nhwc on device type cpu data format nchw 修改為 nhwc 2 關於dataset name 將影象資料轉換為tfrec...