如何实现cron表达式每2小时一次的统一管理,不用实现修改代码就能修改定时任务执行时间

动态改变Spring定时任务执行频率

    由于公司门户系统需要定时推送数据进国家平台所以首先想到的是利用spring的定时任务进行定时推送,当然对于这种需求比较简单如下操作即鈳:

当然注意了:头文件上需要加上

这样配置就结束了,很简单明了

    通过上述的配置,已经实现了简单的定时任务调度但是这中写法鈈适宜动态修改,至少我还没有按照上述的写法动态修改频率成功过于是,这里写一下另外一种写法:

//任务触发可修改任务的执行周期

项目启动后,只要触发改变cron的参数即可实现动态 修改任务调度频率如:测试在controller层中,当访问了 某个url后触发改变了cron 的参数,达到了预期的效果

开始默认的频率是2s /次,后来通过controller层进行修改成了10s /次


如果你有更好的方法,记得分享出来

}

    后台项目开发中经常会用到定时任务现在实现定时任务都方式也是多种多样。下面列举几种常见的定时任务实现方式:

 
从控制台输入的结果中我们可以看出所有的定时任务都是在同一个线程池用同一个线程来处理的那么我们如何来并发的处理各定时任务呢,请继续向下看

4. 多线程处理定时任务

 



注: 最开始我试图在ScheduledAnnotationBeanPostProcessor类中做文章,因为里面也有一个类似的方法setScheduler()但是最后失败了,不知道是否可以通过这个类实现定时任务的并发如果有實现了的也请告诉大家一下方法。

5. 执行结果(并发)

 
 
通过控制台输出的结果看出每个定时任务都是在通过不同的线程来处理了
 
cron表达式每2尛时一次是一个字符串,是由空格隔开的6或7个域组成每一个域对应一个含义(秒 分 时 每月第几天 月 星期 年)其中年是可选字段。
但是此处敲一下黑板,spring的schedule值支持6个域的表达式也就是不能设定年,如果超过六个则会报错源码如下:
 
 
 

2. 每个域可出现的字符类型和各字符的含义

 
 

(1)各域支持的字符类型

 
 





 

? : 只能用在每月第几天和星期两个域。表示不指定值当2个子表达式其中之一被指定了值以后,为了避免冲突需要将另一个子表达式的值设为“?”;



L : 表示最后,只能出现在星期和每月第几天域如果在星期域使用1L,意味着在最后的一个星期日触发。
W : 表示有效工作日(周一到周五),只能出现在每月第几日域系统将在离指定日期的最近的有效工作日触发事件。注意一点W的最近寻找不会跨过月份

# : 用于确定每个月第几个星期几,只能出现在每月第几天域例如在1#3,表示某月的第三个星期日
 
 





}

我要回帖

更多关于 cron表达式每2小时一次 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信