SpringBoot 整合 Spring Retry——优雅实现接口重试 接口调用失败时直接返回错误不是最佳选择有些场景重试一下就成功了。Spring Retry 提供了声明式重试机制。一、引入依赖dependencygroupIdorg.springframework.retry/groupIdartifactIdspring-retry/artifactId/dependencydependencygroupIdorg.aspectj/groupIdartifactIdaspectjweaver/artifactId/dependency二、开启重试SpringBootApplicationEnableRetrypublicclassSeckillApplication{publicstaticvoidmain(String[]args){SpringApplication.run(SeckillApplication.class,args);}}三、使用 RetryableServicepublicclassPaymentService{privatestaticfinalLoggerlogLoggerFactory.getLogger(PaymentService.class);Retryable(value{RemoteAccessException.class,TimeoutException.class},maxAttempts3,backoffBackoff(delay1000,multiplier2))publicbooleanrefund(StringorderNo){log.info(退款请求: {},orderNo);// 调用第三方支付接口returnthirdPartyRefund(orderNo);}Recoverpublicbooleanrecover(RemoteAccessExceptione,StringorderNo){log.error(退款失败记录到异常表: {},orderNo,e);// 记录到失败表人工处理returnfalse;}}四、自定义重试策略ConfigurationpublicclassRetryConfig{BeanpublicRetryTemplateretryTemplate(){RetryTemplatetemplatenewRetryTemplate();// 重试策略最多重试5次间隔递增ExponentialBackOffPolicybackOffnewExponentialBackOffPolicy();backOff.setInitialInterval(1000);backOff.setMultiplier(2);backOff.setMaxInterval(10000);template.setBackOffPolicy(backOff);// 异常判断哪些异常需要重试SimpleRetryPolicyretryPolicynewSimpleRetryPolicy();retryPolicy.setMaxAttempts(5);template.setRetryPolicy(retryPolicy);returntemplate;}}五、编程式重试ServicepublicclassOrderService{AutowiredprivateRetryTemplateretryTemplate;publicbooleanprocessOrder(LongorderId){returnretryTemplate.execute(context-{log.info(处理订单第{}次尝试,context.getRetryCount()1);returndoProcess(orderId);},context-{log.error(最终失败,context.getLastThrowable());returnfalse;});}}六、重试配置spring:retry:max-attempts:3# 全局最大重试次数七、秒杀系统应用ServicepublicclassSeckillService{Retryable(valueOptimisticLockException.class,maxAttempts3,backoffBackoff(delay200))publicbooleandeductStock(LongproductId){// 乐观锁失败时自动重试returnproductMapper.updateStock(productId)0;}} 觉得有用的话点赞 关注【张老师技术栈】吧

相关新闻

最新新闻

2026 程序员求职:权限与日志,为什么成了 Agent 工程师的“隐形门槛”?

2026 程序员求职:权限与日志,为什么成了 Agent 工程师的“隐形门槛”?

聊《程序员就业怎么选方向?先回答几个现实问题》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要摘要:当大模型应用从“能跑 Demo”走向“敢上生产”,企业真正卡住你的不是模型…

2026/7/30 20:26:36
爬虫转大模型,真正值钱的不是“能抓”,是“敢用”

爬虫转大模型,真正值钱的不是“能抓”,是“敢用”

聊《大模型岗位变了,爬虫工程师该补的还是算法吗?》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要摘要:从网页抓取到 RAG 落地,我的转型之路没有走通算法捷径&am…

2026/7/30 20:26:36
WandEnhancer:打破游戏修改器限制的技术实践与架构解析

WandEnhancer:打破游戏修改器限制的技术实践与架构解析

WandEnhancer:打破游戏修改器限制的技术实践与架构解析 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer 你是否曾因WeMod每日2小时的使用…

2026/7/30 20:26:36
跑腿小程序配送费与订单调度系统架构设计

跑腿小程序配送费与订单调度系统架构设计

1. 跑腿业务中的核心联动机制跑腿小程序作为本地生活服务的重要载体,其配送费计算与订单调度系统的协同运作直接决定了平台运营效率和用户体验。在实际业务场景中,这两个系统需要实现毫秒级的实时数据交互,才能保证从用户下单到骑手接单的全流…

2026/7/30 20:26:36
2027亚洲消费电子展正式启用“赛逸展”中文品牌

2027亚洲消费电子展正式启用“赛逸展”中文品牌

2027年6月26日至28日,北京亦庄将迎来2027亚洲消费电子展全新升级盛会,展会正式启用“赛逸展”专属中文品牌名称,完成品牌体系全面升级,开启展会专业化、品牌化、国际化全新发展篇章。 经过多年行业深耕与2026届展会的成功落地&…

2026/7/30 20:26:36
深入解析C++ std::map:排序规则、红黑树实现与性能优化实战

深入解析C++ std::map:排序规则、红黑树实现与性能优化实战

1. std::map 容器核心概念与设计哲学在 C 的日常开发里,尤其是处理需要快速查找和关联数据的场景,std::map绝对是一个绕不开的“老朋友”。很多刚接触 STL 的朋友,可能会把它简单地理解为一个“可以自定义键值对的数组”,但它的内…

2026/7/30 20:21:36

月新闻