与org.springframework.retry.annotation.Retryable
的功能相似,当方法抛出指定的异常后会进行重试。
最大的区别在于,该工具会将失败的任务进行持久化(比如存储到mysql数据库中),当系统重启后任务依然可以继续执行。
这点非常重要,也就是当方法失败后,不会抛出异常而是会继续向后执行,重试操作会在任务线程中被触发。
目前任务线程设计为单线程的,任务会被循环串行执行,这是因为该工具被设计为去处理一些简单的低耗时的任务。
这也就表示即使系统重启任务依然可以被继续执行。
以及如果你进行了多节点的集群部署,那么任务数据将被共享执行。
在需要重试的方法上添加注解@AsyncRetryable
,被注解的方法参数必须为BaseTaskParam
的子类
执行测试方法 top.rizon.WebApplicationTest.main()
在该DEMO中,为了方便演示,实现了一个基于内存的持久化方案(top.rizon.MemTaskHelper
)