返回顶部
首页 > 资讯 > 后端开发 > Python >spring @schedule注解如何动态配置时间间隔
  • 442
分享到

spring @schedule注解如何动态配置时间间隔

2024-04-02 19:04:59 442人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录@schedule注解动态配置时间间隔spring 注解式Schedule配置定时任务@schedule注解动态配置时间间隔 动态配置时间间隔是通过自己实现的任务注册到任务调度实

@schedule注解动态配置时间间隔

动态配置时间间隔是通过自己实现的任务注册到任务调度实现的,并在每次调度的时候更改下次调度时间间隔,如果任务阻塞或者挂掉了就不会再被调度了,如果设置时间过长,到下次调度就需要等待很长时间。


import org.springframework.beans.factory.annotation.Autowired;
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.PeriodicTrigger;
import org.springframework.stereotype.Component; 
import java.util.Date; 
 
@Component
@EnableScheduling
public class DynamicScheduleTaskSecond implements SchedulingConfigurer {
    private static final long WEEK_MILLIS = 604800000;
    private static final long MIN_MILLIS = 1000;
    private static long period = 1000;
    static long l = System.currentTimeMillis();
 
    @Autowired
    SetPeriod setPeriod; 
    public static long getPeriod() {
        return period;
    }
 
    public static void setPeriod(long period) {
        DynamicScheduleTaskSecond.period = period;
    }
 
    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        taskRegistrar.addTriggerTask(new Runnable() {
            @Override
            public void run() {
                try {
                    setPeriod.update(period);
                    System.out.println("abc");
                    Long last = System.currentTimeMillis() - l;
                    l = System.currentTimeMillis();
                    System.out.println(last);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }, new Trigger() {
            @Override
            public Date nextExecutionTime(TriggerContext triggerContext) {
                if (period < MIN_MILLIS || period > WEEK_MILLIS)
                    period = MIN_MILLIS;
                PeriodicTrigger periodicTrigger = new PeriodicTrigger(period);
                Date nextExecDate = periodicTrigger.nextExecutionTime(triggerContext);
                return nextExecDate;
            }
        });
    }
}
  
import org.springframework.stereotype.Component; 
@Component
public class SetPeriod { 
    private static Long maxPeriod = 1000l; 
    public void update(Long period) {
        maxPeriod += 1000;
        setScheduleConfig(maxPeriod);
    }
 
    public boolean setScheduleConfig(Long period) {
        DynamicScheduleTaskSecond.setPeriod(period);
        return true;
    }
}

上面是实现动态调度的一个简单实例,下面说一下基本原理。

动态调度功能主要是实现SchedulingConfigurer函数式接口,接口中的方法configureTasks的参数是重点。


@FunctionalInterface
public interface SchedulingConfigurer {
 
 
 void configureTasks(ScheduledTaskRegistrar taskRegistrar); 
}

看名字 ScheduledTaskRegistrar就知道是一个调度任务注册类,调用这个类的addTriggerTask方法需要两个参数


    public void addTriggerTask(Runnable task, Trigger trigger) {
        this.addTriggerTask(new TriggerTask(task, trigger));
    }

一个是任务线程这个最后说,先说一下第二个Trigger,这是一个设置任务触发时间的接口,具体的实现有两个类,一个是CronTrigger对应的就是cron类型的时间设置,一个是PeriodicTrigger对应的就是FixDelay和FixRate两种方式的时间设置,实例中使用的是后者。


public interface Trigger {
    @Nullable
    Date nextExecutionTime(TriggerContext var1);
}

接口方法参数是一个TriggerContext,这个参数就是任务触发的上下文,里面保存着上一次任务开始时间和结束时间和实际执行用时,自己需要实现这个nextExecutionTime方法根据上一次任务执行时间来返回一个新的Date时间,new一个新的periodicTrigger对象初始化period时间间隔为新的时间间隔用nextExecutionTime方法就可以了根据上下文时间返回一个新的任务调度时间了,但是period的时间不能太长也不能太短最好设置一个区间,这样可以避免很多粗心的错误导致的麻烦,到此完美解决动态设置任务调度时间间隔功能。

再说一下第一个线程任务中的需要做的事,执行的任务需要在其他的具体类中实现,然后在这个线程中调用,然后每次在调度任务的时候就要根据时间业务重新设置时间间隔,比如读配置后改变时间间隔,也就是调度和具体的任务形成一个环,调度执行具体的任务后,具体的任务在设置调度的时间间隔。

spring 注解式Schedule配置定时任务


@Component
public class ScheduledTasks {
    @Autowired
    private ActivityService activityService;
//    1000即1s
    @Scheduled(fixedRate = 1000)
    public void reportCurrentTime() {
        System.out.println("当前时间: " + DateUtil.getNow());
        log.info("打印当前时间: {}.", DateUtil.getNow());
    }
    
    @Scheduled(cron = "0 0 4 * * ? ")
    public void updateRankLIstToRedis() {
        
        List<RankInfoDTO> list = activityService.countRankList(ACTIVITY_WEB);
    }
}

很简单,要注意的是 设置时间间隔有两种 corn和fixedRate,一种适用于较长的时间而且能设置特定时间,一种则较短。

cron的话,百度第一个就是傻瓜式工具网页,不用怕不会写。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: spring @schedule注解如何动态配置时间间隔

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

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

猜你喜欢
  • spring @schedule注解如何动态配置时间间隔
    目录@schedule注解动态配置时间间隔spring 注解式Schedule配置定时任务@schedule注解动态配置时间间隔 动态配置时间间隔是通过自己实现的任务注册到任务调度实...
    99+
    2024-04-02
  • spring schedule如何实现动态配置执行时间
    本篇内容介绍了“spring schedule如何实现动态配置执行时间”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!spring sched...
    99+
    2023-06-25
  • spring schedule实现动态配置执行时间
    目录spring schedule 动态配置执行时间@schedule注解动态配置时间间隔spring schedule 动态配置执行时间 之前saas平台实现动态修改定时任务的时间...
    99+
    2024-04-02
  • 如何使用spring-task定时任务动态配置修改执行时间
    小编给大家分享一下如何使用spring-task定时任务动态配置修改执行时间,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!spring-task定时任务动态配置修改执行时间因项目需要,几个定时任务需要人为动态设置执行时间,...
    99+
    2023-06-25
  • python如何使用time.sleep设置时间间隔
    这篇文章主要介绍python如何使用time.sleep设置时间间隔,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、说明由于原本爬虫可能会对对方网站造成访问负荷压力,因此这种预防措施不仅能在一定程度上防止被封,而且...
    99+
    2023-06-15
  • 使用spring-task定时任务动态配置修改执行时间
    目录spring-task定时任务动态配置修改执行时间spring schedule 动态配置执行时间spring-task定时任务动态配置修改执行时间 因项目需要,几个定时任务需要...
    99+
    2024-04-02
  • Spring的注解配置与XML配置之间的比较
    注释配置相对于 XML 配置具有很多的优势:它可以充分利用 Java 的反射机制获取类结构信息,这些信息可以有效减少配置的工作。如使用 JPA 注释配置 ORM 映射时,我们就不需要...
    99+
    2022-11-15
    spring 注解配置 XML配置
  • javascript如何动态显示时间
    这篇文章主要为大家展示了“javascript如何动态显示时间”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“javascript如何动态显示时间”这篇文章吧。 ...
    99+
    2024-04-02
  • Zabbix中如何配置时间段
    在Zabbix中配置时间段可以通过以下步骤进行: 登录Zabbix的Web界面,进入管理页面。 在左侧菜单中点击“管理”选项,再选...
    99+
    2024-04-02
  • 如何给wordpress创建动态的置顶文章长时间引起注意
    从WordPress 2.7 开始加入了“置顶文章(Sticky Posts)”。置顶文章的作用是希望长时间引起读者注意,可以表明站点的简介、版权声明、友情链接的交换原则等。但太长时间的不变也会引...
    99+
    2022-06-12
    置顶文章 动态置顶
  • 如何理解动态数组和时间复杂度
    本篇内容主要讲解“如何理解动态数组和时间复杂度”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解动态数组和时间复杂度”吧!一、数组基础1.1 定义数组(Array)是一种线性表数据结构,它用...
    99+
    2023-06-15
  • MySQL8如何设置自动创建时间和自动更新时间
    这篇文章主要介绍“MySQL8如何设置自动创建时间和自动更新时间”,在日常操作中,相信很多人在MySQL8如何设置自动创建时间和自动更新时间问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL8如何设置自...
    99+
    2023-07-05
  • vue如何动态实时的显示时间浅析
    vue动态实时显示时间有两种方法 1.可以用day.js,处理日期和时间的js库 用法 npm install dayjs --save 引入import dayjs from 'd...
    99+
    2024-04-02
  • Linux云服务器如何配置自动时间同步
    本篇内容介绍了“Linux云服务器如何配置自动时间同步”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!时间同...
    99+
    2023-02-11
    linux 云服务器
  • 使用Spring MVC4 如何配置注解
    使用Spring MVC4 如何配置注解?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在传统的Spring项目中,我们要写一堆的XML文件。而这些XML文件格式...
    99+
    2023-05-31
    springmvc 注解配置
  • springboot配置mybatis的sql执行时间超时如何解决
    这篇文章主要介绍“springboot配置mybatis的sql执行时间超时如何解决”,在日常操作中,相信很多人在springboot配置mybatis的sql执行时间超时如何解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法...
    99+
    2023-07-06
  • js如何实现动态显示时间效果
    这篇文章给大家分享的是有关js如何实现动态显示时间效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。示例代码如下:<!DOCTYPE HTML> ...
    99+
    2024-04-02
  • win10自动休眠时间如何设置
    Windows 10的自动休眠时间可以通过以下步骤进行设置:1. 打开“控制面板”:可以通过在开始菜单中搜索“控制面板”来打开。2....
    99+
    2023-09-08
    win10
  • win10如何设置自动锁屏时间
    这篇文章主要介绍“win10如何设置自动锁屏时间”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“win10如何设置自动锁屏时间”文章能帮助大家解决问题。win10设置自动锁屏时间的方法首先我们点击左下...
    99+
    2023-07-01
  • cad如何设置自动保存时间
    这篇文章主要讲解了“cad如何设置自动保存时间”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“cad如何设置自动保存时间”吧!cad设置自动保存时间的方法:首先打开自己的“CAD软件”。 然后...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作