返回顶部
首页 > 资讯 > 精选 >Spring Task如何动态修改任务执行计划cron
  • 383
分享到

Spring Task如何动态修改任务执行计划cron

2023-06-25 12:06:58 383人浏览 独家记忆
摘要

小编给大家分享一下spring Task如何动态修改任务执行计划cron,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Spring Task 动态修改任务执行计划

小编给大家分享一下spring Task如何动态修改任务执行计划cron,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

    Spring Task 动态修改任务执行计划cron

    Spring Task 能够在不重启服务的情况下,动态修改批量任务执行时间。

    原理

    Spring Task目前仅支持TriggerContext上修改下次执行时间(批量任务执行后回调SchedulinGConfigurer.configureTasks,让用户可以重新设置Trigger,从而动态修改下次执行时间)),这种方法的弊端就是“执行时间不能实时生效”。

    为此,看了下task文档,感觉若要实现实时生效功能,必须代码里手工启动/停止Spring task任务。

    Demo如下

    首先,xml里不需要配置springTask相关的executor和scheduler。其次,在代码里自定义scheduler和taskReGIStrar(SpringTask启动的类)。最后,开个线程,模拟动态修改cron表达式的接口。

    Spring Task如何动态修改任务执行计划cron

    输出如下:(35min没有执行原task)

    INFO 27-11 14:34:10,476 - Initializing ExecutorService
    INFO 27-11 14:34:10,484 - nextExecutionTime: 0 35 14 * * ?
    修改cron为: 0 36 14 * * ?
    INFO 27-11 14:34:20,487 - Initializing ExecutorService
    INFO 27-11 14:34:20,488 - nextExecutionTime: 0 36 14 * * ?
    INFO 27-11 14:36:00,001 - dynamicCronTask is running...
    INFO 27-11 14:36:00,001 - nextExecutionTime: 0 36 14 * * ?

    Spring @Scheduled定时任务动态修改cron参数

    • 在定时任务类上增加@EnableScheduling注解,并实现SchedulingConfigurer接口。(注意低版本无效)

    • 设置一个静态变量cron,用于存放任务执行周期参数。

    • 另辟一线程,用于模拟实际业务中外部原因修改了任务执行周期。

    • 设置任务触发器,触发任务执行,其中就可以修改任务的执行周期。

    Class : SpringDynamicCornTask

    package com.xindatai.ibs.lime.dycSchedul;import java.util.Date;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.context.annotation.Lazy;import org.springframework.scheduling.Trigger;import org.springframework.scheduling.TriggerContext;import org.springframework.scheduling.annotation.EnableScheduling;import org.springframework.scheduling.annotation.SchedulingConfigurer;import org.springframework.scheduling.config.ScheduledTaskRegistrar;import org.springframework.scheduling.support.CronTrigger;import org.springframework.stereotype.Component;@Lazy(false)@Component@EnableSchedulingpublic class SpringDynamicCornTask implements SchedulingConfigurer {    private static final Logger logger = LoggerFactory.getLogger(SpringDynamicCornTask.class);    private static String cron;    private SpringDynamicCornTask() {        cron = "0/5 * * * * ?";        // 开启新线程模拟外部更改了任务执行周期        new Thread(new Runnable() {            @Override            public void run() {                try {                    Thread.sleep(15 * 1000);                } catch (InterruptedException e) {                    e.printStackTrace();                }                cron = "0/10 * * * * ?";                System.out.println("cron change to : " + cron);            }        }).start();    }    @Override    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {        taskRegistrar.addTriggerTask(new Runnable() {            @Override            public void run() {                // 任务逻辑                logger.info("dynamicCronTask is running...");            }        }, new Trigger() {            @Override            public Date nextExecutionTime(TriggerContext triggerContext) {                // 任务触发,可修改任务的执行周期                CronTrigger trigger = new CronTrigger(cron);                Date nextExecutionTime = trigger.nextExecutionTime(triggerContext);                return nextExecutionTime;            }        });    } }

    Console :

    [INFO 2017-06-01 12:26:25 SpringDynamicCornTask] - dynamicCronTask is running...
    [INFO 2017-06-01 12:26:30 SpringDynamicCornTask] - dynamicCronTask is running...
    [INFO 2017-06-01 12:26:35 SpringDynamicCornTask] - dynamicCronTask is running...
    cron change to : 0/10 * * * * ?
    [INFO 2017-06-01 12:26:40 SpringDynamicCornTask] - dynamicCronTask is running...
    [INFO 2017-06-01 12:26:50 SpringDynamicCornTask] - dynamicCronTask is running...
    [INFO 2017-06-01 12:27:00 SpringDynamicCornTask] - dynamicCronTask is running...

    以上是“Spring Task如何动态修改任务执行计划cron”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

    --结束END--

    本文标题: Spring Task如何动态修改任务执行计划cron

    本文链接: https://lsjlt.com/news/304605.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • Spring Task如何动态修改任务执行计划cron
      小编给大家分享一下Spring Task如何动态修改任务执行计划cron,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Spring Task 动态修改任务执行计划...
      99+
      2023-06-25
    • Spring Task 动态修改任务执行计划cron方式
      目录Spring Task 动态修改任务执行计划cron原理Demo如下Spring @Scheduled定时任务动态修改cron参数Spring Task 动态修改任务执行计划cr...
      99+
      2024-04-02
    • 如何使用spring-task定时任务动态配置修改执行时间
      小编给大家分享一下如何使用spring-task定时任务动态配置修改执行时间,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!spring-task定时任务动态配置修改执行时间因项目需要,几个定时任务需要人为动态设置执行时间,...
      99+
      2023-06-25
    • 使用spring-task定时任务动态配置修改执行时间
      目录spring-task定时任务动态配置修改执行时间spring schedule 动态配置执行时间spring-task定时任务动态配置修改执行时间 因项目需要,几个定时任务需要...
      99+
      2024-04-02
    • Linux用户自定义at、cron计划任务执行的方法
      linux系统中有两种计划任务,一种是只会执行一次 at 计划任务,一种是可以周期性地执行的 cron 计划任务 at 一次性计划任务 描述 在指定的时间执行特定命令(单次),也称为延时动作任务。 用法 at 时间...
      99+
      2022-06-04
      Linux at cron 计划任务
    • 在Linux中如何使用cron计划任务
      这篇文章主要介绍在Linux中如何使用cron计划任务,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!常见(和非常见)的 cron 用途我使用 cron 服务去安排一些常见的事情,比如,每天凌晨 2:00 发生的定期备...
      99+
      2023-06-16
    • win10计划任务不执行如何解决
      如果Windows 10计划任务不执行,可以尝试以下方法解决:1. 检查计划任务设置:打开“任务计划程序库”,找到相应的计划任务,检...
      99+
      2023-10-10
      win10
    • C#如何Task执行任务,等待任务完成
      目录Task执行任务,等待任务完成C# Task任务队列需求基本的Task用法让Task任务按顺序执行使用异步委托解决UI界面卡死问题异步任务队列按顺序执行封装任务队列Task执行任...
      99+
      2024-04-02
    • SpringBoot如何动态修改Scheduled(系统启动默认执行,动态修改)
      SpringBoot 动态修改Scheduled 场景: 可配置的 Scheduled 执行时间,正常的 Scheduled 是在项目启动的时候固定死的,没办法根据调用后台代码自动更...
      99+
      2024-04-02
    • 如何搭建基于Spring Task实现动态管理任务
      这篇文章主要讲解了“如何搭建基于Spring Task实现动态管理任务”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何搭建基于Spring Task实现动态管理任务”吧!什么是定时任务定时...
      99+
      2023-06-15
    • Linux如何执行shell脚本完成任务计划
      小编给大家分享一下Linux如何执行shell脚本完成任务计划,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!导读众所周知,当前linux跑任务计划我们一般借助于crontab任务计划来实现。但这个任务计划默认最小单位为分钟...
      99+
      2023-06-05
    • CentOS下如何实行计划任务
      本篇内容主要讲解“CentOS下如何实行计划任务”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“CentOS下如何实行计划任务”吧!1、循环执行的计划任务linux下面有atd和crond两种计划...
      99+
      2023-06-10
    • Oracle如何通过注释改变执行计划
      小编给大家分享一下Oracle如何通过注释改变执行计划,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Oracle 通过注释改变执...
      99+
      2024-04-02
    • 数据库中如何修改自动收集统计信息任务的执行时间
      小编给大家分享一下数据库中如何修改自动收集统计信息任务的执行时间,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 一般情况,oracle11G数据库自动收集统计信...
      99+
      2024-04-02
    • 动态更改Spring定时任务Cron表达式的优雅方案实例详解
      目录0x01 前言0x02 可变与不可变0x03 创造与毁灭0x04 验证0x05 小结0x01 前言 在 SpringB...
      99+
      2022-12-22
      spring定时任务动态修改 spring 定时任务表达式 spring定时器cron表达式
    • 如何在thinkphp中使用windows计划任务定时执行php文件
      实现思路如下: 通过win的“任务”功能来定时执行一个bat文件,bat文件会调用php.exe文件,php.exe可以传递参数指定执行哪个类和方法 方法如下: 一,thinkphp...
      99+
      2024-04-02
    • 如何使用Windows XP中的任务计划程序自动执行磁盘碎片整理
      在Windows XP中,您可以使用任务计划程序来自动执行磁盘碎片整理。以下是详细步骤:1. 打开“开始”菜单,选择“所有程序”,然...
      99+
      2023-09-07
      Windows
    • Job定时任务如何在Spring Boot中执行
      这篇文章给大家介绍Job定时任务如何在Spring Boot中执行,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一,@scheduled注解@scheduled这个注解是定时任务的核心所在,在某个方法上面标记此注解,即...
      99+
      2023-05-31
      springboot 定时任务 job
    • spring schedule如何实现动态配置执行时间
      本篇内容介绍了“spring schedule如何实现动态配置执行时间”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!spring sched...
      99+
      2023-06-25
    • SQL如何改变那些CBO无能为力的执行计划
      小编给大家分享一下SQL如何改变那些CBO无能为力的执行计划,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!用户写的 sql , Oracle 会进行...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作