关于调度任务的问题

本贴最后更新于 2188 天前,其中的信息可能已经时移世异

以前只做过简单的定时任务
现在有这么一个需求,特来请教一下

  1. 调度任务数据库存储,web 页面维护
  2. 需要立即执行
  3. 配置重试机制,比如运行失败,如果有配置了重试的,在多久以后重试一次
  4. 暂停
  5. 启动

相关帖子

被采纳的回答

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 88250

    问题是?

    1 回复
  • someone9891 via iPhone

    主要是重试这块,直接 quartz 有还是要自己去怎么实现?任务执行失败,根据配置的次数和间隔去重试,直到成功或者次数用完则等待下一次执行周期

    1 回复
  • 88250

    估计得自己实现了,设计表时多弄几个状态字段和计数字段,然后定时扫表,注意幂等和并发控制,大致就这思路吧。

  • 估计要自己开发一套定时任务调度系统。

  • Ahian 1

    xxl-job

  • 14032 1 2 赞同

    我对 JeeSite 改造版加入了 Quartz 功能,应该符合你的需求, 地址 https://github.com/LYHFUU/jeesite
    04.jpg
    Job.png

    2 回复
  • someone9891 via macOS

    我学习一下 👍

  • 233333

    👍 copycopy

  • someone9891 via macOS

    @participants 各位大佬,又来打扰大家了, 我现在定时任务基本的需求能解决,但是又发现一个新的问题。

    quartz 数据库存储模式,已经注册到 quartz 队列中的任务,会在数据库存储,服务器重启以后还是会按照之前的周期运行,
    但是存在一个问题,我在自定义的任务表定义自己的任务。在启动的时候 遍历自己的数据注册到 quartz 中,假如直接在数据库删除了自定义的任务,服务器不管重不重启,那个任务已经注册到 quartz 中了,这种问题怎么解决,目前就是直接在数据库删除了的话,任务还会运行

    如果通过接口删除的时候,可以手动 remove,但是数据库删除就不行了

    1 回复
  • someone9891 via macOS

    目前我能想到的就是
    1.在启动初始化的时候把 队列清空,但是这就与 quartz 的数据库模式初衷相违背了
    2.任务执行的时候再去数据库自定义的表查询一次,查不到就停止 并 remove 。

  • someone9891 1 评论 via macOS

    这个竟然不是一个 Q&A

    我帮你改为问答帖了,悬赏积分你自己设置一下 doge
    88250
  • hjljy

    刚好我最近也在搞数据库化的 Quartz 你这个问题可以通过配置解决
    图片.png

    1 回复
  • someone9891 via macOS

    更新的话,停机的时候错过的任务还会执行吗?比如预定在 2 点执行一次,但是 1 点五十停机了,2 点 10 分重启以后,2 点那一次还会执行吗

    1 回复
  • hjljy

    不會,要等下個兩點才執行

    1 回复
  • someone9891 via macOS

    那就跟我说的启动的时候清空重新初始化是一样的啊,我是手动初始化,你那个配置对我是没有用的。

    而且正好也违背了 quartz 的 错过还能运行的机制。

    2 回复
  • 14032

    可了解下 CronScheduleBuilder 的三种策略

    withMisfireHandlingInstructionIgnoreMisfires() withMisfireHandlingInstructionDoNothing() withMisfireHandlingInstructionFireAndProceed()
    1 回复
  • someone9891 via macOS

    好的

  • someone9891 via macOS

    配置是没错,但是假如我的任务基本信息存在数据库中,quartz 启动的时候,将我配置的任务 添加到 quartz 队列,我再从数据库删除我自己的任务信息,这条在 quartz 中的任务到时间了还是会继续运行的啊

    1 回复
  • 14032 1 1 赞同

    因为已经持久化存储了,手动删库的时候,要同时处理下 quartz 的表 QRTZ_CRON_TRIGGERS、QRTZ_TRIGGERS、QRTZ_JOB_DETAILS,这样 QuartzSchedulerThread 线程获取不到 acquireNextTriggers 触发器,就不会执行

    1 回复
  • someone9891 via macOS

    对啊,如果在界面维护删除的话没问题,可以处理这些,如果直接 数据库删的话就坑爹了,算了,不想这些了 😭 想太多给自己找麻烦

  • someone9891 via macOS

    image.png

    目前采用这种方式了,不知道合理不合理,在任务每次执行的时候都去数据库查询以下这条任务在自定义的表里还在不,不在电话就调用删除方法,删除方法中会 删除掉 quartz 队列里面的任务。

  • someone9891 via macOS

    @participants 我发现我用 springboot 写好的 demo 都没问题了,但是集成到我们到项目里面就不行了,初始化任务可以,但是 到点不执行…… ,我们项目是使用 dubbo 的分布式项目,我只能将定时任务写在 service 层,我猜是因为 service 注册服务到 zookeeper,quartz 其实没有一个 持续的状态在运行 。。。大佬们有什么 方法吗?

    1 回复
  • someone9891 via macOS

    启动日志截图:
    image.png
    quartz trigger 数据:
    image.png
    jobdetail
    image.png

    image.png

  • hjljy

    不晓得你这个是什么情况,我前两天的项目也是在 dubbo 当中用的 quartz , 具体业务是:创建一个定时任务,进行数据采集,采集完毕后,调用数据校验服务进行校验。用的是 dubbo2.6 注册中心 zk

    1 回复
  • someone9891 via macOS

    没事了,是我自己把状态搞错了,任务我设置的是暂停。。。1 是暂停 2 是正常,我 一直以为 1 是正常,在数据库插入的是 1

请输入回帖内容 ...

推荐标签 标签

  • 锤子科技

    锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。

    4 引用 • 31 回帖
  • Excel
    31 引用 • 28 回帖 • 2 关注
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 2 关注
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    42 引用 • 130 回帖 • 251 关注
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 119 关注
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    36 引用 • 35 回帖 • 1 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 37 关注
  • Anytype
    3 引用 • 31 回帖 • 25 关注
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖 • 4 关注
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    730 引用 • 1281 回帖 • 4 关注
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    86 引用 • 165 回帖
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 569 关注
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖
  • 叶归
    12 引用 • 55 回帖 • 21 关注
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 435 关注
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    188 引用 • 319 回帖 • 242 关注
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    240 引用 • 224 回帖
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    16 引用 • 236 回帖 • 251 关注
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    21 引用 • 31 回帖
  • OneDrive
    2 引用 • 3 关注
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    25993 引用 • 107852 回帖
  • AWS
    11 引用 • 28 回帖 • 8 关注
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    167 引用 • 597 回帖 • 1 关注
  • OpenResty

    OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

    17 引用 • 51 关注
  • 反馈

    Communication channel for makers and users.

    120 引用 • 906 回帖 • 279 关注