`

113. Spring Boot 定时任务升级篇(动态修改cron参数)

阅读更多

 

   

  需求缘起:在发布了《Spring Boot定时任务升级篇》之后得到不少反馈,其中有一个反馈就是如何动态修改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;

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;

 

/**

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

 * @author Angel --守护天使

 * @version v.0.1

 * @date 201746

 */

@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("TaskCronChange task 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这个类有一个方法addTriggerTaskRunnable,Trigger) 两个参数,一个Runnable,一个是Trigger,在Runnable中执行业务逻辑代码,在Trigger修改定时任务的执行周期。

       启动查看控制台的打印信息如下:

TaskCronChange task is running ... Thu Apr 06 05:38:20 CST 2017

TaskCronChange task is running ... Thu Apr 06 05:38:25 CST 2017

TaskCronChange task is running ... Thu Apr 06 05:38:30 CST 2017

cron change to:0/10 * * * * *

TaskCronChange task is running ... Thu Apr 06 05:38:35 CST 2017

TaskCronChange task is running ... Thu Apr 06 05:38:40 CST 2017

TaskCronChange task is running ... Thu Apr 06 05:38:50 CST 2017

 

下篇博客【Spring Boot 定时任务升级篇(动态添加修改删除定时任务)】

 

à悟空学院:https://t.cn/Rg3fKJD

学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!

SpringBoot视频:http://t.cn/A6ZagYTi

Spring Cloud视频:http://t.cn/A6ZagxSR

SpringBoot Shiro视频:http://t.cn/A6Zag7IV

SpringBoot交流平台:https://t.cn/R3QDhU0

SpringData和JPA视频:http://t.cn/A6Zad1OH

SpringSecurity5.0视频:http://t.cn/A6ZadMBe

Sharding-JDBC分库分表实战http://t.cn/A6ZarrqS

 

分布式事务解决方案「手写代码」:http://t.cn/A6ZaBnIr

分享到:
评论

相关推荐

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

    动态修改`@Scheduled`任务的cron参数,首先需要配置一个任务调度器,并开启定时任务扫描。在Spring Boot应用中,可以通过以下配置启动定时任务: ```yaml spring: task: scheduling: enabled: true ``` 接下来...

    spring boot定时任务接收邮件并且存储附件的方法讲解

    关于 Spring Boot 定时任务接收邮件并且存储附件的方法讲解 Spring Boot 是一个基于 Java 的框架,它提供了许多实用的功能,包括定时任务。在 Spring Boot 中实现定时任务非常简单,只需要使用两个注解:`@...

    spring boot 定时任务源码

    在Spring Boot框架中,定时任务是一项非常重要的功能,它允许开发者在特定的时间间隔执行特定的任务。Spring Boot通过集成Spring Framework的Task Execution和Scheduling模块,提供了便捷的方式来管理和执行定时任务...

    springboot定时任务的动态开启关闭

    以上就是Spring Boot中实现定时任务动态开启和关闭的基本步骤。在实际开发中,我们还需要考虑任务的异常处理、日志记录以及可能的并发问题。理解并掌握这些知识点对于构建高效稳定的后台服务至关重要。

    spring-boot 定时任务集群

    **一、Spring Boot定时任务** 1. **@Scheduled注解**:Spring Boot提供了对定时任务的支持,主要通过`@Scheduled`注解来实现。该注解可以放在方法上,表示这个方法会按照指定的周期执行。例如: ```java @Scheduled...

    k8s+springboot+cronjob 定时任务配置

    本篇文章将详细探讨如何在 Kubernetes (k8s) 集群环境中,结合 Spring Boot 应用程序和 Kubernetes CronJob 资源来配置定时任务。 首先,Spring Boot 是一个流行的 Java 框架,用于快速构建微服务应用。它提供了...

    Spring 定时任务源码(spring 三种定时任务的实现方式)

    在需要执行定时任务的方法上添加@Scheduled注解,并指定cron表达式或fixedRate/fixedDelay参数,即可实现定时任务。Spring会自动扫描并注册这些任务,无需额外配置。例如: ```java @Component public class ...

    Springboot整合Quartz实现定时任务数据库动态配置

    本篇文章将详细探讨如何在Spring Boot项目中整合Quartz,并通过MySQL数据库实现定时任务的动态配置。 首先,我们需要在项目中添加依赖。在Spring Boot的`pom.xml`文件中,引入Spring Boot的`spring-boot-starter-...

    spring boot @scheduled定时任务配置

    在Spring Boot框架中,`@Scheduled`注解是用于创建定时任务的重要工具,它使得开发者无需依赖外部的任务调度器如Quartz或CronJob,就能在应用内部轻松地实现周期性的任务执行。这个特性极大地简化了Java应用中的定时...

    Spring Boot中的@Scheduled注解:定时任务的原理与实现

    ### Spring Boot中的@Scheduled注解:定时任务的原理与实现 #### 一、引言 在现代软件开发中,定时任务是一种非常常见的需求。无论是数据同步、定期清理缓存还是发送提醒邮件,都需要应用程序能够在特定的时间点...

    Spring配置定时任务

    在Spring框架中,定时任务是通过Spring的Task模块来实现的,这允许我们在应用程序中创建和管理定时任务,而无需依赖外部的调度器如Quartz或Cron。本例主要探讨如何在Spring中配置和执行定时任务。 首先,我们要引入...

    Spring Boot 通过web开启和关闭定时任务

    本教程将深入探讨如何通过Web接口来控制Spring Boot中的定时任务,使其能够在运行时动态开启或关闭。 首先,我们需要引入`spring-boot-starter-quartz`或者`spring-boot-starter-scheduled`依赖来启用Spring Boot的...

    Spring定时任务实现(非Web项目)

    在Spring框架中,定时任务是通过Spring的Task模块来实现的,这使得在非Web项目中也能方便地进行定时任务的调度。以下是对这个主题的详细讲解。 首先,我们需要了解Spring Task的核心组件: 1. **...

    IntelliJ IDEA中创建Spring boot项目,定时任务测试

    4. **添加依赖**:在Dependencies(依赖)一栏,可以通过搜索框添加Spring Boot的定时任务支持,即`spring-boot-starter-quartz`或`spring-boot-starter-task`。后者是Spring Boot官方推荐的定时任务解决方案。 5. ...

    Spring定时任务的简单例子

    要使用Spring的定时任务功能,首先在你的`pom.xml`(如果是Maven项目)或`build.gradle`(如果是Gradle项目)文件中添加Spring Boot的`spring-boot-starter-task`依赖。如果使用的是Spring Framework而非Spring ...

    Spring的定时器动态修改参数cron的值

    本篇文章将深入探讨如何动态地修改Spring定时器的cron表达式,以便任务能够根据业务需求进行实时调整。 首先,我们需要了解Spring中的定时任务是如何配置的。通常,我们会在Spring的配置文件中使用`@...

    springboot-scheduler定时任务学习demo源码

    总之,"springboot-scheduler定时任务学习demo源码"是一个很好的学习资源,它涵盖了Spring Boot定时任务的基本用法和配置,包括`@Scheduled`、`@EnableScheduling`、cron表达式以及异步任务执行。通过阅读和分析这个...

    Spring中实现定时任务

    这篇博客将重点讨论如何使用Spring Task来创建和管理定时任务。 首先,我们需要引入Spring Task的依赖。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml <groupId>org.springframework.boot ...

    SpringCloudSchedule定时任务

    它是基于Spring Framework和Spring Boot的定时任务解决方案,它利用了Spring的`@Scheduled`注解,允许开发者轻松地定义周期性任务。在Spring Boot应用中,只需添加`spring-boot-starter-web`和`spring-boot-starter-...

    java-springboot-quartz-定时任务.zip

    Java SpringBoot Quartz 定时任务是一个广泛应用于企业级开发中的技术组合,主要用于自动化执行周期性的任务。SpringBoot作为轻量级的框架,简化了Spring应用的初始搭建以及开发过程,而Quartz则是一个功能强大的...

Global site tag (gtag.js) - Google Analytics