定时任务组件Quartz

news2024/12/23 23:53:38

1 定时任务组件Quartz
1.1 Quartz介绍
Quartz是Job scheduling(作业调度)领域的一个开源项目,Quartz既可以单独使用也可以跟spring框架整合使用,在实际开发中一般会使用后者。使用Quartz可以开发一个或者多个定时任务,每个定时任务可以单独指定执行的时间,例如每隔1小时执行一次、每个月第一天上午10点执行一次、每个月最后一天下午5点执行一次等。

官网:http://www.quartz-scheduler.org/

maven坐标:

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

1.2 Quartz入门案例
本案例基于Quartz和spring整合的方式使用。具体步骤:

(1)创建maven工程quartzdemo,导入Quartz和spring相关坐标,pom.xml文件如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.itheima</groupId>
    <artifactId>quartdemo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz-jobs</artifactId>
            <version>2.2.1</version>
        </dependency>
    </dependencies>
</project>

(2)自定义一个Job

package com.itheima.jobs;
/**
 * 自定义Job
 */
public class JobDemo {
    public void run(){
        System.out.println("job execute...");
    }
}

(3)提供Spring配置文件spring-jobs.xml,配置自定义Job、任务描述、触发器、调度工厂等

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans.xsd
                        http://www.springframework.org/schema/mvc
                        http://www.springframework.org/schema/mvc/spring-mvc.xsd
                        http://code.alibabatech.com/schema/dubbo
                        http://code.alibabatech.com/schema/dubbo/dubbo.xsd
                        http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 注册自定义Job -->
    <bean id="jobDemo" class="com.itheima.jobs.JobDemo"></bean>
    <!-- 注册JobDetail,作用是负责通过反射调用指定的Job -->
    <bean id="jobDetail" 
          class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <!-- 注入目标对象 -->
        <property name="targetObject" ref="jobDemo"/>
        <!-- 注入目标方法 -->
        <property name="targetMethod" value="run"/>
    </bean>
    <!-- 注册一个触发器,指定任务触发的时间 -->
    <bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <!-- 注入JobDetail -->
        <property name="jobDetail" ref="jobDetail"/>
        <!-- 指定触发的时间,基于Cron表达式 -->
        <property name="cronExpression">
            <value>0/10 * * * * ?</value>
        </property>
    </bean>
    <!-- 注册一个统一的调度工厂,通过这个调度工厂调度任务 -->
    <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <!-- 注入多个触发器 -->
        <property name="triggers">
            <list>
                <ref bean="myTrigger"/>
            </list>
        </property>
    </bean>
</beans>

(4)编写main方法进行测试

package com.itheima.jobs.com.itheima.app;import org.springframework.context.support.ClassPathXmlApplicationContext;public class App {
    public static void main(String[] args) {
        new ClassPathXmlApplicationContext("spring-jobs.xml");
    }
}

执行上面main方法观察控制台,可以发现每隔10秒会输出一次,说明每隔10秒自定义Job被调用一次。

1.3 cron表达式
上面的入门案例中我们指定了一个表达式:0/10 * * * * ?

这种表达式称为cron表达式,通过cron表达式可以灵活的定义出符合要求的程序执行的时间。本小节我们就来学习一下cron表达式的使用方法。如下图:

在这里插入图片描述

cron表达式分为七个域,之间使用空格分隔。其中最后一个域(年)可以为空。每个域都有自己允许的值和一些特殊字符构成。使用这些特殊字符可以使我们定义的表达式更加灵活。

下面是对这些特殊字符的介绍:

逗号(,):指定一个值列表,例如使用在月域上1,4,5,7表示1月、4月、5月和7月

横杠(-):指定一个范围,例如在时域上3-6表示3点到6点(即3点、4点、5点、6点)

星号(*):表示这个域上包含所有合法的值。例如,在月份域上使用星号意味着每个月都会触发

斜线(/):表示递增,例如使用在秒域上0/15表示每15秒

问号(?):只能用在日和周域上,但是不能在这两个域上同时使用。表示不指定

井号(#):只能使用在周域上,用于指定月份中的第几周的哪一天,例如6#3,意思是某月的第三个周五 (6=星期五,3意味着月份中的第三周)

L:某域上允许的最后一个值。只能使用在日和周域上。当用在日域上,表示的是在月域上指定的月份的最后一天。用于周域上时,表示周的最后一天,就是星期六

W:W 字符代表着工作日 (星期一到星期五),只能用在日域上,它用来指定离指定日的最近的一个工作日

4.4 cron表达式在线生成器
前面介绍了cron表达式,但是自己编写表达式还是有一些困难的,我们可以借助一些cron表达式在线生成器来根据我们的需求生成表达式即可。

http://cron.qqe2.com/

7

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/189289.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络第四章 网络层数据平面

4.0 目录[TOC]4.1 概述作用&#xff1a;主机到主机之间传输TCP segment或UDP datagram将段封装成IP datagram以及解封装IP datagram【在网络边缘和路由器上都要进行】A.两大功能&#xff1a;转发路由转发&#xff1a;从不同的端口接收数据&#xff0c;再通过合适的端口发送出去…

WPS表格:函数公式

文章目录1. ROW()、ROWS(array)1&#xff09;ROW()2&#xff09;ROWS(array)2. COUNT(参数)、COUNTA(参数)、COUNTIF(参数)1&#xff09;COUNT()2&#xff09;COUNTA()3&#xff09;COUNTIF()3. VLOOKUP(参数)、LOOKUP(参数)1&#xff09;VLOOKUP(参数)2&#xff09;LOOKUP(向量…

数据分析有发展前景吗?,零基础能学得会吗?

数据分析这门专业是近几年因大数据的出现而产生的新兴职业&#xff0c;分为大数据分析和数据分析师&#xff0c;区别在于大数据分析师要求更高&#xff0c;不仅需要数据分析的基本能力&#xff0c;还要具备编程能力、机器学习技能&#xff0c;以及本身所接触到处理的都是海量数…

webpack打包构建工具的使用和相关的配置

目录 一、 webpack的基础使用步骤 二、webpack的配置 1、入口和出口 2、 webpack打包后自动生成html文件并自动引入打包后的js 3、加载器loader 3.1、处理css文件 3.2、处理less文件 3.3、处理图片文件 3.4、处理字体文字 3.5、处理高版本js语法&#xff08;降级&#xff…

Linux locate命令

Linux locate命令用于查找符合条件的文档&#xff0c;他会去保存文档和目录名称的数据库内&#xff0c;查找合乎范本样式条件的文档或目录。一般情况我们只需要输入 locate your_file_name 即可查找指定文件。语法locate [-d ][--help][--version][范本样式...]参数&#xff1a…

Notepad++ 代码格式化插件工具

因为notepad的NppAStyle插件只支持格式化C、C、C#、Java这四种编程语言的代码&#xff0c;所以推荐使用这个CoolFormat的插件&#xff0c;相比于NPPAStyle&#xff0c;CoolFormat支持C\C\C#\CSS\HTML\Java\JavaScript\JSON\Objective-C\PHP\SQL\XML代码格式化工具。还可以作为V…

后端java模拟前端RSA.js加密登录爬虫

项目开发过程中&#xff0c;经常会遇到数据爬取需求&#xff0c;但是对于某些网站&#xff0c;由于前端加密&#xff0c;导致数据爬取不容易。比如某网站&#xff0c;前端使用RSA.js加密&#xff0c;并且后端返回对应的公钥的指数和模数&#xff0c;通过后端返回的指数和模数对…

电商如何打开数字化的破局之路

电商网购已经成为我们的日常生活&#xff0c;在如此高节奏的工作下&#xff0c;打开手机或者电脑从网上挑选自己需要的物品&#xff0c;方便快捷&#xff0c;伴随着移动互联网和月的高速发展&#xff0c;电子商务作为现今的产业在我国快速增长和兴起。 如今的电商模式多种多样&…

Elasticsearch7.8.0版本入门——JavaAPI操作(批量操作文档)

目录一、pom文件依赖二、批量操作文档 代码示例2.1、批量创建文档 代码示例2.2、批量删除文档 代码示例一、pom文件依赖 引入相关依赖 <!-- elasticsearch 依赖 --> <dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch…

网络分层:OSI模型与TCP/IP模型

前言 这部分个人还是觉得有点难&#xff0c;之前也看过类似的文章&#xff0c;还是没有理解&#xff0c;更多的是概念掌握 OSI模型&#xff1a;Open System Interconnection 这是一个概念模型&#xff0c;存在于理论上&#xff0c;而没有真正实现。需要参考这样的模型&#x…

可以绕过 Windows UAC 吗

目录 一、引言 二、使用 COM 提升名称方法绕过 UAC 2.1 什么样的 COM 组件支持自动提权 2.2 如何以提升名称方法创建 COM 组件对象 2.3 有了权限提升的 COM 组件对象后&#xff0c;怎么为我们所用呢 2.4 使用 rundll32.exe 执行 COM 提升名称代码 2.4.1 rundll32.exe 简…

Qt使用QTextEdit来批量添加数据到数据库中

1.首先要了解QTextEdit的遍历方式 在下面的文章中已经介绍&#xff0c;这里就不在介绍了&#xff1a; 富文本处理&#xff08;QTextEdit&#xff09;_旷工锁的博客-CSDN博客_qtextedit 富文本 基本步骤为&#xff1a; 创建一个QTextEdit使用QTextDocument来获取QTextEdit中的…

IronPDF 2023.1 for Java Crack

关于 IronPDF for Java 在 Java 8、Kotlin 和 Scala 项目中创建、编辑和提取 PDF 内容。 IronPDF for Java&#xff08;作为 IronPDF for .NET 的一部分提供&#xff09;是一个 Java PDF 库&#xff0c;专为在 Windows、Linux 或云平台上运行的 Java 8、Kotlin 和 Scala 而设计…

2023-01-29 学习笔记:常见28种数据分析模型

2023-01-29 学习笔记&#xff1a;常见28种数据分析模型 知乎上的一篇文章&#xff0c;虽然之前对深度学习相关模型有所了解&#xff0c;但通过这篇文章了解了更多模型的应用场景&#xff0c;同时也知道了日常一共有多少种实用模型。 Excel/Python/sql/PowerBI/Pyecharts这些只是…

YOLOV3中卷积层,池化层,yolo层理解

前言&#xff1a;YOLOV3学习笔记&#xff0c;记录对卷积层&#xff0c;池化层&#xff0c;yolo层的理解&#xff0c;阐述深度学习中卷积核&#xff0c;通道数相关名词的含义。yolov3-tiny网络如下&#xff1a;卷积层0层为卷积层&#xff0c;其中filters16&#xff0c;表示的卷积…

css如何给div添加一个条纹背景,在背景上画一条有宽度的斜线

如图&#xff0c;想要实现div的背景上有一条深色的斜线。 这里主要使用的是css里的线性渐变属性。 先看一下网上示例及效果&#xff1a; 示例一 <body><div class"patterns pt1"></div><div class"patterns pt2"></div>…

Python - 实现logging根据日志级别输出不同颜色

文章目录一、完整代码二、代码解释三、附&#xff1a;自定义颜色对应代码前段时间因为工作需要脚本打印不同颜色的日志。查找了网上的一些方法&#xff0c;大部分都需要再安装第三方模块。后来选择采用比较简易的办法&#xff0c;类似于print()函数自定义内容颜色这种方式的缺陷…

抽烟行为监测识别系统 yolov5

抽烟行为监测识别系统通过pythonyolov5网络深度学习技术&#xff0c;对画面中人员抽烟行为进行主动识别检测。在介绍Yolo算法之前&#xff0c;首先先介绍一下滑动窗口技术&#xff0c;这对我们理解Yolo算法是有帮助的。采用滑动窗口的目标检测算法思路非常简单&#xff0c;它将…

C# AForge的简单使用

AForge.NET专为计算机视觉和人工智能应用而设计&#xff0c;这种C#框架适用于图像处理、神经网络、遗传算法、模糊逻辑、机器学习和机器人等。 该库是一个开源项目&#xff0c;包括&#xff1a; AForge.Imaging —— 一些日常的图像处理和过滤器 AForge.Vision —— 计算机视…

【MySQL】MySQL高手是如何练成的?

MySQL什么是MySQL呢&#xff1f;怎样练成MySQL高手&#xff1f;在Linux安装MySQL问题处理Mysql 的用户管理什么是MySQL呢&#xff1f; Mysql 是开源的&#xff0c;可以定制的&#xff0c;采用了 GPL 协议&#xff0c;可以根据业务需要修改源码来开发自己的 Mysql 系统。 MySQL…