网站首页

人工智能P2P分享搜索全网发布信息网站地图标签大全

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

如何动态修改cron参数呢?

时间:2023-04-12 11:04

人气:

作者:admin

标签: 服务  JAVA 

导读:按正常来讲,修改定时任务的执行周期,把服务停下来,改下任务的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

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信