0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何动态修改cron参数呢?

jf_78858299 来源:SpringBoot 作者:林祥纤 2023-04-12 11:04 次阅读

如何动态修改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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    19

    文章

    2904

    浏览量

    103001
  • 服务
    +关注

    关注

    0

    文章

    74

    浏览量

    18461
收藏 人收藏

    评论

    相关推荐

    cron和crontab命令

    本帖最后由 windworld 于 2016-2-24 14:08 编辑 cron机制cron可以让系统在指定的时间,去执行某个指定的工作,我们可以使用crontab指令来管理cron机制
    发表于 02-24 13:33

    DM8168编码器可以动态修改修改profile、level吗?

    动态参数里面没有,请问在理论上来说是可以修改的吗? 是不是把对应的channal先disable然后在M3 video中修改profile,这样可以吗?
    发表于 05-25 05:12

    如何修改BLECC2540中advertData这个数组的动态

    1实现动态修改这个值0xc5 ];下面这个函数是特征值的调用返回,在这里该作何处理?static void simpleProfileChangeCB( uint8 paramID )[uint8
    发表于 10-21 09:24

    请问怎样动态修改广播包的内容?

    我使用CC2540,想动态修改广播包中的数据,该怎么实现?蓝牙BLE协议栈中有没有支持动态修改广播包内容?项目需求将一些数据放在广播中,广播给所有的listener,并且这些数据时会
    发表于 08-04 08:00

    怎样去修改分区表参数文件

    怎样去创建可以修改分区日期数据备份?怎样去修改分区表参数文件
    发表于 03-04 07:13

    怎样使用STM32去支持并运行RTT动态模块

    的驱动,因为最终编译的动态模块需要在文件系统中。进入到bsp目录,使用env工具配置如下:为了支持动态模块的运行,修改 bsp 对应的 rtconfig.py 中编译动态模块时需要用到
    发表于 06-08 10:58

    请问N32926能否调用动态?需要修改内核吗?

    现在需要开发一个项目,中间需要用到第三方的动态库,请问N32926能否调用动态,需要修改内核吗?
    发表于 06-14 09:14

    arm技术修改D1N4002的仿真参数

    修改D1N4002的仿真参数,步骤一 绘出电路图、设置分析参数、存档及执行仿真,步骤二 使用Probe观察仿真结果
    发表于 06-18 09:53 1476次阅读

    无线振弦采集仪远程修改参数方式

    无线振弦采集仪远程修改参数方式 河北稳控科技无线振弦采集仪 无线采集仪支持远程无线修改设备参数功能,可通过短信指令、 FTP 文件、 TCP 在线指令三种途径实现。
    的头像 发表于 08-02 11:14 684次阅读
    无线振弦采集仪远程<b class='flag-5'>修改</b><b class='flag-5'>参数</b>方式

    如何在SpringBoot项目中实现动态定时任务

    之前写过文章记录怎么在SpringBoot项目中简单使用定时任务,不过由于要借助cron表达式且都提前定义好放在配置文件里,不能在项目运行中动态修改任务执行时间,实在不太灵活。
    的头像 发表于 09-30 11:16 1495次阅读

    工程监测多通道振弦模拟信号采集仪VTN参数修改

    工程监测多通道振弦模拟信号采集仪VTN参数修改 工程监测多通道振弦模拟信号采集仪VTN 1 使用按键修改参数 使用按键修改某个
    的头像 发表于 02-15 09:54 350次阅读
    工程监测多通道振弦模拟信号采集仪VTN<b class='flag-5'>参数</b><b class='flag-5'>修改</b>

    教程 1-修改广告参数

    教程 1 - 修改广告参数
    发表于 03-15 19:39 0次下载
    教程 1-<b class='flag-5'>修改</b>广告<b class='flag-5'>参数</b>

    查看和修改G120变频器参数的具体方法

    查看和修改G120变频器参数的具体方法(BOP-2面板+Startdrive)1. 通过BOP-2操作面板查看和修改参数的具体方法  进入参数
    发表于 04-10 09:43 2次下载
    查看和<b class='flag-5'>修改</b>G120变频器<b class='flag-5'>参数</b>的具体方法

    如何动态添加修改删除定时任务?

    如何动态添加修改删除定时任务?那么我们一起看看具体怎么实现,先看下本节大纲: (1)思路说明; (2)代码解析; (3)修改定时任务执行周期特别说明;
    的头像 发表于 04-12 11:06 870次阅读

    教程 1-修改广告参数

    教程 1 - 修改广告参数
    发表于 07-06 18:49 0次下载
    教程 1-<b class='flag-5'>修改</b>广告<b class='flag-5'>参数</b>