如何动态修改cron参数呢?

如何动态修改cron参数呢?那么我们一起看看具体怎么实现,先看下本节大纲:
(1)简单方式:修改定时任务的执行周期;
(2)动态修改定时任务的执行周期;
接下来看下本节的具体内容:
(1)简单方式:修改定时任务的执行周期;
按正常来讲,修改定时任务的执行周期,把服务停下来,改下任务的cron参数,再重启服务就搞搞定了。这种方式很简单,没有可说的,但是有没有一种可能,在不停服务的情况下,就可以动态的修改任务的cron参数呢?哈哈,那是必须的必。
(2)动态修改定时任务的执行周期;
首先我们先会回顾下,我们之前是使用了@scheduled(cron =“0/5 * * * * *”)这种方式适用于固定任务周期的任务,若要修改任务执行周期,只能走“停服务—修改任务执行周期—重启服务”这条路。那么如何动态修改呢,我们看下步骤:
① 在定时任务类上增加@enabledscheduling注解,并实现schedulingconfigurer接口。
② 设置一个静态的cron,用于存放任务执行周期参数。
③ 开启一个线程,用于模拟实际业务中外部原因修改了任务执行周期。
④ 设置任务触发器,触发任务执行。
具体的代码如下:
package com.kfit.task;
import java.util.date;
import org.springframework.scheduling.trigger;
import org.springframework.scheduling.triggercontext;
importorg.springframework.scheduling.annotation.enablescheduling;
importorg.springframework.scheduling.annotation.schedulingconfigurer;
importorg.springframework.scheduling.config.scheduledtaskregistrar;
import org.springframework.scheduling.support.crontrigger;
import org.springframework.stereotype.component;
/**
spring @scheduled定时任务动态修改cron****参数@author angel --守护天使@version v.0.1@date 2017年4月6日*/
@component
@enablescheduling
**public **class taskcronchange implements schedulingconfigurer{
**public ****static** string *cron* ; **public** taskcronchange() { //默认情况是:每5秒执行一次. *cron* = 0/5 * * * * *; **new** thread(**new** runnable() { // 开启新线程模拟外部更改了任务执行周期. @override **public ****void** run() { **try** { // 让线程睡眠 15秒. thread. *sleep* (15000); } **catch** (interruptedexception e) { e.printstacktrace(); } //修改为:每10秒执行一次. *cron* = 0/10 * ** * *; system. ***err*** .println(cron change to:+ *cron* ); } }).start();;} @override**public ****void** configuretasks(scheduledtaskregistrar taskregistrar) { runnable task = **new** runnable() { @override **public ****void** run() { //任务逻辑代码部分. system. ***out*** .println(taskcronchangetask is running ... + **new** date()); } }; trigger trigger = **new** trigger() { @override **public** date nextexecutiontime(triggercontext triggercontext) { //任务触发,可修改任务的执行周期. crontrigger trigger = **new** crontrigger( *cron* ); date nextexec = trigger.nextexecutiontime(triggercontext); **return **nextexec; } }; taskregistrar.addtriggertask(task, trigger);}}
这里核心的主要是使用到了scheduledtaskregistrar这个类有一个方法addtriggertask(runnable,trigger) 两个参数,一个runnable,一个是trigger,在runnable中执行业务逻辑代码,在trigger修改定时任务的执行周期。
启动查看控制台的打印信息如下:taskcronchange task is running ... thu apr 0605:38:20 cst 2017
taskcronchangetask is running ... thu apr 06 05:38:25cst 2017
taskcronchangetask is running ... thu apr 06 05:38:30cst 2017
cronchange to:0/10 * * * * *
taskcronchangetask is running ... thu apr 06 05:38:35cst 2017
taskcronchangetask is running ... thu apr 06 05:38:40cst 2017
taskcronchangetask is running ... thu apr 06 05:38:50cst 2017

Intel 32位处理器 ,Intel 32位处理器结构原理
大众将以1.22亿美元的价格收购沃尔沃旗下的WirelessCar车联网公司75.2%的股份
手持电缆测试仪与传统电缆故障测试系统的区别
以智能制造为代表的一系列技术改造,正在改变企业的生产方式
Google AI发数据集论文、办挑战赛却拒绝开放数据集?
如何动态修改cron参数呢?
电子芯闻早报:传感器厂商InvenSense或出售 iPhone8曝光汇总
数字数据初创公司Biomemory宣布推出1000美元全球首款DNA存储产品
全球首套大规模常温常压有机液态储氢材料装置建设启动
安徽电信&联通正式联合发布 5G SA 网络规模商用
二极管最重要的特性是什么?双二极管比两并联的二极管有哪些优点?
GTI发布5G全球通终端倡议:年底发商用终端
薄膜/厚膜电路制作工艺
苹果的压力触控技术是如何实现的
自动驾驶行业已经进入“下半场”
浙江联通“5G+智慧医疗”让更多人共享优质的医疗资源
使用碳化硅MOSFET实现快速直流充电器
新型中空长航时无人机彩虹4C:已进行多项改进,能保证在极端或恶劣环境中的作战能力
推出ESP8266升级版
智能家居产品有哪些(功能)_智能家居产品大全_智能家居产品介绍