企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
使用的springboot2.x ## maven依赖 ~~~ <dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> </dependency> ~~~ ## 启动类 ~~~ @EnableRetry ~~~ ## 使用 再要重试的方法上添加注解, 需要抛出异常, 常规导致注解不生效的原因这个注解一样也会, 之前要重试的方法是写在工具类的static里, 就无法重试 (注解不生效), 后来就是把工具类弄成交给spring管理的普通类普通方法, 方法也是@Autowired 导入后调用, 就正常了 ~~~ @Retryable(value = BusinessException.class, maxAttempts = 3, backoff = @Backoff(value = 3000) ) value : 表示捕获的异常, 进行触发重试, maxAttempts 重试次数, backoff = @Backoff(value = 3000) 每次重试间隔3秒 ~~~ 重试次数耗尽还是失败, 可以用@Recover , 方法第一个参数是捕获的异常, 其他和@Retryable的方法完全一样 ~~~ @Recover ~~~ ## 参考示例 只有重试功能核心代码, 业务代码没有 ~~~ @Retryable(value = BusinessException.class, maxAttempts = 3, backoff = @Backoff(value = 3000) ) public Map<String, String> sendWeChatText(String userId, String content) { // 处理业务和其他内容省略 // 有问题, 抛出自定义异常, 触发重试 if .... throw new BusinessException(""); } ~~~ @Recover public Map<String, String> sendWeChatText(BusinessException e, String userId, String content) { log.error(" sendWeChatText 发送多次仍然失败 ", e); throw e; } 调用者, 另一个类 ~~~ // 其他忽略 try { map = wxUtils.sendWeChatText(userId, content); catch (Exception e) { log.error("推送失败", e); } ~~~