公众号:踏歌的 Java Daily
上代码
需要引入
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
<version>1.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.7</version>
</dependency>
import java.time.LocalTime;
/**
* @ProjectName: user
* @Package: com.user.service.Impl
* @ClassName: PayServiceImpl
* @Author: Pond fish
* @Description: 重试机制
* @Date: 2020/6/8 13:17
* @Version: 1.0
* 需要在启动类中加入@EnableRetry注解
*/
@Service
public class PayServiceImpl {
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private ComService cService;
@Autowired
private Constants constants;
@Autowired
private RestTemplateHeaderInitUtils headerInitUtils;
/**
* 1.@Retryable和@Recover返回值类型必须一致
* 2.处理的异常要统一
* 3.IllegalArgumentException(重试)
*/
@Retryable(value = Exception.class, maxAttempts = 3, backoff = @Backoff(delay = 2000, multiplier = 1.5))
public AutoPlaceOrderDTO retryLH(JSONObject jsonb) throws Exception {
logger.info("*****①调用其他平台*****");
//调用其他平台
String result = cService.openTransferString(jsonb, OperationPlatformCode.saveHYTOrder.getVal(),
constants.orderHYTAcceptUrl(), headerInitUtils.operationPlatformInit(), HttpMethod.POST.name());
logger.info("*****②返回结果*****: " + result);
AutoPlaceOrderDTO autoDTO = JSONObject.parseObject(result, AutoPlaceOrderDTO.class);
String code = autoDTO.getCode();
int code2 = Integer.parseInt(code);
if (code2 == 1028) {
throw new IllegalArgumentException("*****④未连接到平台*****");
}
logger.info("*****③重试结束*****");
return autoDTO;
}
@Recover
public String recover(Exception e) {
logger.warn("*****⑤连接失败*****" + LocalTime.now());
return "连接失败";
}
}
创作不易请多多支持,更多详情请关注wx工作号:xvguo1127