Spring Task服务启动后就执行且每隔50分钟执行一次的实现方案

题目有点唬人,其实很简单。直接看下面配置吧!

<task:scheduled-tasks>
   <task:scheduled ref="mpAccessTokenRefreshTimer" method="refresh" fixed-rate="3000000" />
   <task:scheduled ref="noDataReportTimer" method="updateStatus" cron="0 0 9 * * ?" />
</task:scheduled-tasks>

哈哈,看出来了吗?cron表达式可以指定执行时间,也可以指定间隔时间,但cron配置的间隔时间有局限性。就是没办法保证服务启动后立即执行。另外如果间隔时间不一定准确。比如要求每隔50分钟执行一次,则cron="0 */50 * * * ?",但实际上这种cron表达式的配置每到整点都会执行。也就是实际的执行情况如下:

18:50、19:00、19:50、20:00、20:50、21:00

显然这不是我们想要的结果。那么如何实现呢?用另一个属性fixed-rate,当然这个值是毫秒单位的,所以50分钟就是3000000

测试一下,执行情况如下:

18:41、19:31、20:21、21:11
显然这是我们想要的结果。但为什么是18:41开始执行呢,当然是因为现在是18:41,服务启动定时任务会立即执行啊。当然你也可以延迟执行,再配个属性 initial-delay="首次执行延迟毫秒数" 就行了。

fixed-rate和cron组合起来使用行不行?我没试过,你可以试试,试完告诉我!

猜你喜欢

转载自blog.csdn.net/keketrtr/article/details/81103128
今日推荐