定时器:Quartz框架

2023-11-18

简介

Quartz是 OpenSymphony 开源组织在 Job scheduling 领域的开源项目,是由 java 开发的一个开源的任务日程管理系统。
Quartz 是一个功能丰富的开源作业调度库,几乎可以集成到任何 Java 应用程序中——从最小的独立应用程序到最大的电子商务系统。
Quartz 可用于创建简单或复杂的调度,以执行数十、数百甚至数万个作业;任务被定义为标准 Java 组件的作业,这些组件几乎可以执行任何您可以对其编程来执行的操作。
Quartz Scheduler 包括许多企业级特性,例如对 JTA 事务和集群的支持。
8c3b787ef4bcd8e1e24e5a922335e887.png

简单Demo

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.3.0</version>
</dependency>

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz-jobs</artifactId>
    <version>2.3.0</version>
</dependency>

任务类:

public class JobDemo implements Job {
    public void execute(JobExecutionContext jobExecutionContext) {
        JobDetail detail = jobExecutionContext.getJobDetail();
        String name = detail.getJobDataMap().getString("name");
        System.out.println("my job name is  " + name + " at " + new Date());
    }
}

生成任务细节对象、触发器对象 和 调度对象的类:(我将其封装在了函数内)
生成任务细节对象:

public JobDetail createJobDetail() {
    return JobBuilder.newJob(jobDemo.class) // 这里传的是实际工作类
            //定义name和group
            .withIdentity("jobName", "group1")
            //job需要传递的内容
            .usingJobData("name", value)
            .build();
}

生成触发器对象:
这里的 withSchedule() 可以传的参数有很多

public Trigger createSimpleTrigger() {
    return TriggerBuilder.newTrigger().withIdentity("triggerName", "group1")
            //加入 scheduler之后立刻执行
            .startNow()
            //定时 ,每隔5秒钟执行一次
            .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                    .withIntervalInSeconds(5)
                    //重复执行
                    .repeatForever())
            .build();
}

生成调度对象:

public Scheduler createScheduler(JobDetail jobDetail, Trigger trigger) {
    try {
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
        scheduler.scheduleJob(jobDetail, trigger);
        scheduler.start();
        return scheduler;
    } catch (SchedulerException e) {
        e.printStackTrace();
        System.out.println("---------error--------");
        return null;
    }
}

cron 规则

spring4以上的版本中,cron表达式包含6个参数:
[秒] [分] [时] [日期] [月] [星期]
还支持几个常用的特殊符号:

*:表示任何时间触发任务
,:表示指定的时间触发任务
-:表示一段时间内触发任务
/:表示从哪一个时刻开始,每隔多长时间触发一次任务。
?:表示用于月中的天和周中的天两个子表达式,表示不指定值。
cron表达式参数具体含义:

秒,取值范围:0-59,支持*,-/
分,取值范围:0-59,支持*,-/
时,取值范围:0-23,支持*,-/
日期,取值范围:1-31,支持*,-/。比秒多了?,表示如果指定的星期触发了,则配置的日期变成无效。
月,取值范围:1-12,支持*,-/
星期,取值范围:1~7,1代表星期天,6代表星期六,其他的以此类推。支持*,-/?。比秒多了?,表示如果指定的日期触发了,则配置的星期变成无效。
常见 cron 表达式使用举例:

0 0 0 1 * ? 每月1号零点执行
0 0 2 * * ? 每天凌晨2点执行
0 0 2 * * ? 每天凌晨2点执行
0 0/5 11 * * ? 每天11点-11点55分,每隔5分钟执行一次
0 0 18 ? * WED 每周三下午6点执行

参考

  1. Quartz框架介绍_我是你妹她哥的博客-CSDN博客_quartz
  2. 定时任务的10种写法,长见识了_Java小果的博客-CSDN博客_定时任务
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

定时器:Quartz框架 的相关文章

  • 从 J2SE 5.0 学习 Java SE 6 有多难?

    我是新来的 我有一个简单的问题 希望有人能帮助我 我即将开始学习Java 正在寻找一本好的教材来使用 我发现 Y Daniel Liang 的 Java 编程入门 评价很高 但我想知道是否可以使用旧的第 6 版 2006 年 7 月 22
  • Emacs 打字骨架对插入也许

    在 Eclipse 中 编辑 Java 代码时 如果我输入一个左括号 我会得到一对括号 如果我然后 输入 第二个括号 它不会插入额外的括号 我如何在 emacs 中得到它 Eclipse 编辑器足够聪明 当我输入闭括号时 它知道我刚刚完成了
  • 什么是“非阻塞”并发?它与普通并发有何不同?

    什么是 非阻塞 并发 它与使用线程的普通并发有何不同 为什么不在所有需要并发的场景中都使用非阻塞并发呢 使用非阻塞并发有开销吗 我听说Java中可以实现非阻塞并发 我们是否应该在特定场景下使用此功能 将这些方法之一与集合一起使用是否有区别或
  • 使用 Bouncy Castle 重建 ED25519 按键 (Java)

    Bouncy Castle 的最新 测试版 版本 bcprov jdk15on 161b20 jar 支持 ED25519 和 ED448 EC 加密以进行签名 我设置了这个完整的工作示例 它按预期工作 我的问题 我是否正确重建了私钥和公钥
  • Junit测试中LocalDateTime反序列化的问题

    我有问题LocalDateTime反序列化Junit测试 我有简单的REST API返回一些DTO目的 当我呼叫端点时 响应没有问题 它是正确的 然后我尝试编写单元测试 得到MvcResult并使用ObjectMapper将其转换为我的DT
  • Java生成范围内不重复的随机数

    我想生成 1 到 4 范围内的随机数 包括 4 这是我的代码 int num r nextInt 4 1 r is instance of Random 但是 我在循环中运行上述代码 并且不想重复随机数 现在发生的事情我经常得到 1 1 1
  • 将 Java 3D 坐标转换为 2D 屏幕坐标

    我正在使用一个名为 Walrus 的 Java 3D 应用程序 该应用程序用于显示有向图 该代码已经具有突出显示节点并在给定其屏幕坐标的情况下在图形中相邻绘制标签的功能 旋转屏幕后 该节点不再突出显示 我所拥有的是 3D 中的节点坐标 我需
  • 使android listview布局可滚动

    我有一个 xml 文件 其布局为 ASCII 形式 ImageView TextView List
  • IDEA:javac:源版本1.7需要目标版本1.7

    使用 IntelliJ IDEA 运行 JUnit 测试时 我得到 我该如何纠正这个问题 使用SDK 1 7 模块语言级别为1 7 Maven 构建工作正常 这就是为什么我相信IDEA配置问题 您很可能在此处从 Maven 导入了不正确的编
  • 注释处理器可以用于代码生成吗?

    假设我定义了一个名为 MyAnnotation 有一个班级X其声明为 MyAnnotation class X 现在在编译时我想检查所有带有注释的类 MyAnnotation并对更多需要在同一进程中编译的 java 源文件进行一些代码生成
  • 在类路径中使用通配符调用 java 失败

    我当前目录中有一些 jar 它们都需要位于类路径中 因此我想对类路径使用通配符约定 命令行是 java exe classpath org python util jython args 但是我收到这个错误 Exception in thr
  • 膨胀类 android.support.v7.internal.widget.NativeActionModeAwareLayout 时出错

    如果您以前解决过这个问题 请有人帮助我 我正在尝试使用材料设计制作一些东西 以便应用程序可以运行到 API 10 的低版本 我的代码中没有任何错误 但我不断收到此错误 Android 日志猫 06 01 05 05 37 414 E And
  • 使用枚举变量切换字符串

    我有一个具有不同值的枚举 并且想要切换字符串变量 现在 我在尝试将枚举值转换为字符串 可以用作大小写常量 时遇到了困难 我最好的尝试是将枚举转换为字符串数组 但开关似乎不接受数组值作为大小写常量 IntelliJ 说 需要恒定的表达 Enu
  • 如何在不打开浏览器的情况下查看 Android 应用程序中的网页?

    嘿 我正在开发一个 Android 应用程序 我想连接到该应用程序内的网络 不过 我在某种程度上尝试过 WebView 但它在我的目录中显示的文件很好 但当连接到 google com 时 它显示错误 然后我添加了这个文件
  • 在大画布上滚动

    我需要一些帮助来了解滚动绘制到 Android 画布上的项目的基础知识 假设我想创建一个时间线 其中 0 处的时间是可视化的顶部 并且随着时间的增加 时间线继续呈现在上一个点下方 如果我想在 Android 上渲染它 我知道我可以通过重写
  • 未找到 GroovyEvaluator

    我会尝试在以下位置制作我的 PIE 3D 报告iReport 在我的 struts xml 中 我用这个来调用我的报告
  • 当键位于父类中时,如何将一对多集合映射到连接的子类

    我想将一对多集合映射到子类 但集合的键是父类的属性 目前我正在映射 AbstractFoo Foo 和 Bar 类 如下所示
  • Swing:如何创建事件并将其分派给组件?

    我需要将一些事件发送到 Swing 中的组件 因此它的处理方式就像任何用户生成的标准 Swing 事件一样 基本上 类似于宏记录器 然后是 JEditorPane 的执行器 但我需要对生成的事件有更多的控制 所以 假设我有一个编辑 我想 捕
  • E/libEGL: validate_display:99 错误 3008 (EGL_BAD_DISPLAY) API 24 或更高版本

    当我使用 API 为 24 或更高版本的设备时 我收到此错误 E libEGL validate display 99 错误 3008 EGL BAD DISPLAY XML 代码 activity main xml
  • 只有创建视图层次结构的原始线程才能触摸其视图。在安卓上[重复]

    这个问题在这里已经有答案了 我只是一个初学者 所以请原谅我问一个可能愚蠢的问题 我不明白只有创建视图层次结构的原始线程才能触摸其视图的含义 请有人告诉我为什么会发生此错误以及如何解决此问题 ThankYou 这是我的班级 public cl

随机推荐

  • 混杂设备与字符设备的区别----misc_register、 register_chrdev 的区别总结

    杂项设备 misc device 杂项设备也是在嵌入式系统中用得比较多的一种设备驱动 在 Linux 内核的include linux目录下有Miscdevice h文件 要把自己定义的misc device从设备定义在这里 其实是因为这些
  • openstack开发实践(一):devstack搭建all-in-one的openstack开发环境

    Devstack简介 devstack是面向开发者的一个openstack部署工具 用户可以指定不同的版本分支进行安装 devstack借助于Shell脚本实现openstack自动化部署 devstack源码中的stack sh即为安装脚
  • Python基于控制台的学生管理系统

    encoding utf 8 定义一个函数 显示可以使用的功能列表给用户 def showInfo print 30 print 学生管理系统 v1 0 print 1 添加学生的信息 print 2 删除学生的信息 print 3 修改学
  • MIPI信号的分析--结合示波器实际测试波形

    如果排查的思路对你有帮助 请记住 消雨匆匆 码字和排查很累 仅此而已 硬件不是抄电路 拿烙铁 懂点软件 细致分析 找问题和破案搜集线索是一样的 PS 硬件知识也可以性感 部分内容来自于此博客的大神总结 http www elecfans c
  • Java+GeoTools实现WKT数据根据EPSG编码进行坐标系转换

    场景 Java GeoTools 开源的Java GIS工具包 快速入门 实现读取shp文件并显示 Java GeoTools 开源的Java GIS工具包 快速入门 实现读取shp文件并显示 霸道流氓气质的博客 CSDN博客 在上面实现J
  • 数字人+ChatGPT强强联手能擦出什么火花?

    随着元宇宙概念的快速发展 以数字人 ChatGPT为形式的创作方式正在颠覆传统视频创作方式 并在市场上呈现快速增长的态势 根据新榜的报道 目前已经有多位大V使用虚拟数字人来协助完成短视频制作 并且值得一提的是 这些视频并没有因为采用数字人而
  • 定时器编码器AB相电机测速( 补充)

    TIM编码器AB相电机测速 定时器编码器AB相电机测速 1 四倍频 2 算法应用 3 stm32硬件连接 3 stm32环境配置端口配置 3 C语言实现编码器个数读取 3 C语言实现编码器个数转换为速度 定时器编码器AB相电机测速 1 四倍
  • vue3配置eslint 出现问题

    vue3配置eslint 出现问题 标题必须使用导入来加载 ES 模块 ESlint Error Must use import to load ES Module 加上这一行即可
  • Jmeter之ForEach控制器

    场景运用 ForEach控制器一般和用户自定义变量或者正则表达式提取器一起使用 其在用户自定义变量或者从正则表达式提取器的返回结果中读取一系列相关的变量 该控制器下的采样器或者控制器都会被执行一次或多次 每次读取不同的变量值 需求2 有一组
  • 学习java随堂练习-20220609

    学习Java的第八天 第1题 第2题 第3题 第4题 第5题 今天是学习Java的第八天 5道练习题 第1题 题目 1 循环输入近6年某高校的录取分数 求出平均分和最低分 运行结果 代码如下 循环输入近6年某高校的录取分数 求出平均分和最低
  • PHP操作Excel

    头 header Content Type application vnd ms excel header Content Disposition attachment filename sample xls header Pragma n
  • 时序预测

    时序预测 MATLAB实现DNN全连接神经网络时间序列预测 目录 时序预测 MATLAB实现DNN全连接神经网络时间序列预测 基本介绍 模型研究 程序设计 学习总结 参考资料 基本介绍 DNN的结构不固定 一般神经网络包括输入层 隐藏层和输
  • 传指针和传引用的区别以及指针和引用的区别

    一 引用 引用的定义 引用是给另外一个变量其别名 所以引用不会分配内存空间 引用是引入了对象的一个同义词 例如 Point pt1 10 10 Point pt2 pt1 上述的代码 定义了pt2为pt1的引用 通过这样的定义 pt2和pt
  • 让生产活动更高效,物料管理场景的RPA应用

    作为制造业 供应链领域常见环节 物料管理 Material Management 通常是对企业生产经营活动所需各种物料的采购 验收 供应 保管 发放 使用等一系列计划与控制活动的总称 物料管理科学与否 将会影响到组织各职能部门间的协调 生产
  • 文件的上传与下载

    一 文件上传 文件上传程序步骤 1 如何在web页面中添加上传输入项
  • python数据驱动测试设计_Python+unittest+DDT实现的数据驱动测试

    前言 数据驱动测试 避免编写重复代码 数据与测试脚本分离 通过使用数据驱动测试 来验证多组数据测试场景 通常来说 多用于单元测试和接口测试 ddt介绍 Data Driven Tests DDT 即数据驱动测试 可以实现不同数据运行同一个测
  • Gcov 详解 + 内核函数覆盖率测试方法详述及产生错误解决办法

    1 gcov是什么 Gcov is GCC Coverage 是一个测试代码覆盖率的工具 是一个命令行方式的控制台程序 伴随GCC发布 配合GCC共同实现对C C 文件的语句覆盖和分支覆盖测试 与程序概要分析工具 profiling too
  • 小白也能学会的爬虫教学(超详细,每一步都配图,不怕你学不会,图文并茂,看完直呼‘爽’)

    详细且简单的爬虫简单教学 小白看了之后直呼 爬虫就这 安装pycharm 一 新建一个工程 二 安装scrapy 三 创建Scrapy工程 四 如何使用scrapy 1 新建一个begin py文件 2 编辑begin py中的内容 3 修
  • hbase MapReduce程序样例入门

    hbase MapReduce程序样例入门 1 先看一个标准的hbase作为数据读取源和输出源的样例 Configuration conf HBaseConfiguration create Job job new Job conf job
  • 定时器:Quartz框架

    文章目录 简介 简单Demo cron 规则 参考 简介 Quartz是 OpenSymphony 开源组织在 Job scheduling 领域的开源项目 是由 java 开发的一个开源的任务日程管理系统 Quartz 是一个功能丰富的开