SpringBoot+Quartz job实现定时任务(1)基础知识及快速实现

如何在 Spring Boot 中使用 Quartz 调度作业 在本文中,我们将看看如何使用Quartz框架来调度任务。Quartz是Java应用程序调度库的事实标准。Quartz支持在特定时间运行作业、重复作业执行、将作业存储在数据库中以及Spring集成。​。 阅读详情

spring boot + quartz job实现定时任务(1) 基础知识及快速实现

(1)什么是Quartz?
(2)Quartz的特点;
(3)Quartz专用词汇说明;
(4)Quartz任务调度的两种实现方法;

接下来看下具体的内容:

(1)什么是Quartz?

Quartz是一个完全由Java编写的开源作业调度框架,为在Java应用程序中进行作业调度提供了简单却强大的机制。Quartz允许开发人员根据时间间隔来调度作业。它实现了作业和触发器的多对多的关系,还能把多个作业与不同的触发器关联。简单地创建一个org.quarz.Job接口的Java类。

(2)Quartz的特点;

作为一个优秀的开源调度框架,Quartz 具有以下特点:

① 强大的调度功能,例如支持丰富多样的调度方法,可以满足各种常规及特殊需求;

② 灵活的应用方式,例如支持任务和调度的多种组合方式,支持调度数据的多种存储方式;

③ 分布式和集群能力,Terracotta 收购后在原来功能基础上作了进一步提升。

④ Quartz 很容易与 Spring 集成实现灵活可配置的调度功能。

(3)Quartz专用词汇说明;

下面是本文中用到的一些专用词汇,在此声明:

scheduler:

任务调度器

trigger:

触发器,用于定义任务调度时间规则

job:

任务,即被调度的任务

misfire:

错过的,指本来应该被执行但实际没有被执行的任务调度

(4)Quartz任务调度的两种实现方法

4.1注解实现任务调度

注解实现任务调度理解和实现起来都非常方便,如果在实际应用中没有复杂的业务场景可以使用注解来实现任务调度。

注解实现业务调度分为两步:

1.创建业务调度类,并添加@Component、@EnableScheduling注解。

2.创建业务调度任务,并添加@Scheduled注解来设置触发间隔。

import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
@EnableScheduling
public class AnnotationCompleteJob {
    //[秒] [分] [小时] [日] [月] [周]
    @Scheduled(cron = "0/2 * * * * ?")
    public void work() throws Exception{
        System.out.println("执行任务调度"+ new Date());
    }

    @Scheduled(cron = "0 0/1 * * * ?")
    public void second(){
        System.out.println("每分钟执行一次"+new Date());
    }

    @Scheduled(fixedRate = 5000)//每5秒执行一次
    public void play() throws Exception {
        System.out.println("每5秒执行Quartz定时器任务:"+new Date());
    }

}

项目运行后,@Scheduled注解的方法会随项目启动,按照设定好的间隔立即执行任务,如果需要项目开启间隔一段时间运行可以在@Scheduled括号里添加参数initialDelay,initialDelay表示首次延迟多长时间后执行,单位ms。

在这里插入图片描述

不过在实验过程中发现,initialDelay不能与cron表达式同时使用。

4.2创建对象实现任务调度

Quartz 任务调度的核心元素是 scheduler, trigger 和 job,其中 trigger 和 job 是任务调度的元数据,scheduler 是实际执行调度的控制器。

在 Quartz 中,trigger 是用于定义调度时间的元素,即按照什么时间规则去执行任务。Quartz 中主要提供了四种类型的 trigger:SimpleTrigger,CronTirgger,DateIntervalTrigger,和 NthIncludedDayTrigger。这四种 trigger 可以满足企业应用中的绝大部分需求。

在 Quartz 中,job 用于表示被调度的任务。主要有两种类型的 job:无状态的(stateless)和有状态的(stateful)。对于同一个 trigger 来说,有状态的 job 不能被并行执行,只有上一次触发的任务被执行完之后,才能触发下一次执行。

Job 主要有两种属性:volatility 和 durability,其中 volatility 表示任务是否被持久化到数据库存储,而 durability 表示在没有 trigger 关联的时候任务是否被保留。两者都是在值为 true 的时候任务被持久化或保留。一个 job 可以被多个 trigger 关联,但是一个 trigger 只能关联一个 job。

在 Quartz 中, scheduler 由 scheduler 工厂创建:DirectSchedulerFactory 或者 StdSchedulerFactory。 第二种工厂 StdSchedulerFactory 使用较多,因为 DirectSchedulerFactory 使用起来不够方便,需要作许多详细的手工编码设置。 Scheduler 主要有三种:RemoteMBeanScheduler, RemoteScheduler 和 StdScheduler。本文以最常用的 StdScheduler 为例讲解。这也是笔者在项目中所使用的 scheduler 类。

这一篇文章,我们紧接着上一篇的文章,讲讲在Quartz在java project的项目中如何进行使用,在这里我们使用maven进行构建项目。先看下本章的大纲:

(1)新建工程quartz-java;
(2)配置pom.xml文件;
(3)编码说明;
(4)编写Job类;
(5)编写启动类进行代码测试;
(6)quartz.properties配置文件说明;

   接下里一起看下具体的内容:

(1)新建工程quartz-java;

   新建一个java project取名为quartz-java。

(2)配置pom.xml文件;

   在pom.xml文件中添加quartz的依赖:
<dependency>

            <groupId>org.quartz-scheduler</groupId>

            <artifactId>quartz</artifactId>

            <version>2.2.3</version>

</dependency>

(3)编码说明;

(一)首先我们需要定义一个任务类,比如为HelloJob ,该类需要继承Job类,然后添加execute(JobExecutionContext context)方法,在这个方法中就是我们具体的任务执行的地方。

(二)在哪里定义“在什么时候执行什么任务呢?”:那么我们需要Scheduler,此类的创建方式使用Quartz提供的工厂类StdSchedulerFactory.getDefaultScheduler()进行创建。

(三)如何触发呢:scheduler.scheduleJob(jobDetail,trigger);进行触发定时任务,在这里需要两个参数。jobDetail可以通过JobBuilder.newJob进行创建,在这里就需要制定一个Job类了,也就是我们第一步创建的HelloJob;trigger类的话,可以通过TriggerBuilder.newTrigger进行创建。

(4)编写Job类;

编写HelloJob任务类:

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import java.util.Date;

public class HelloJob implements Job {

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println("Hello World! quartz job"+new Date());
    }
}

(5)编写启动类进行代码测试;

在Main方法中进行编码测试:

import com.sample.quartzjob.demo1.job.HelloJob;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

import java.util.concurrent.TimeUnit;

public class App {
    public static void main(String[] args) throws SchedulerException, InterruptedException {
        //获取schduler实例
        Scheduler defaultScheduler = StdSchedulerFactory.getDefaultScheduler();
        defaultScheduler.start();
        System.out.println("scheduler start");

        //具体任务
        JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("job1", "group1").build();

        //触发时间点
        SimpleScheduleBuilder simpleScheduleBuilder = SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).repeatForever();

        Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").startNow().withSchedule(simpleScheduleBuilder).build();

        //交由schduler安排触发
        defaultScheduler.scheduleJob(jobDetail,trigger);

        //睡眠20s
        TimeUnit.SECONDS.sleep(20);
        defaultScheduler.shutdown();
        System.out.println("scheduler shut down");
    }
}

代码源码:
gitee
参考文献:

@Scheduled使用及讲解

SpringBoot整合Quartz定时任务 的简单实例

SpringBoot整合Quartz定时任务 的简单实例 2

SpringBoot快速整合Quartz动态管理定时任务 SpringBoot快速整合Quartz动态管理定时任务 背景 ​ 如题,上个版本产品提出了一个报告需求的整体大功能,其中有一个小的子功能就是开发一个在页面==动态添加、删除、修改、启停==的定时任务来执行一系列的操作(生成周期报告、发送邮件等);关于SpringBoot中的定时任务,大家应该都比较熟悉,在主启动类上添加***@EnableScheduling***,然后直接在需要定时执行的方法上直接添加***@Scheduled(cron = “”)并且添加上定时任务的cron表达式即可;但是这种方式有一 阅读详情

相关推荐

Springboot项目中添加Quartz定时任务

Springboot项目中添加Quartz定时任务 快速构建基于springboot的quarz定时任务 文章目录Springboot项目中添加Quartz定时任务前言一、引入依赖二、创建job执行类三、配置spring中.xml文件思考 前言 Spring整合Quartz实现定时任务步骤很简单,大致需要经过如下几步: 创建任务(Job)、配置JobDetail、配置触发器(Trigger)、配置SchedulerFactoryBean。 而Spring+Quartz实现Job有两种方式: 第一种是继承

weixin_48610702的博客 1942

quartz---(1)

           Quartz Quartz是什么? 简单的一些例子 Quartz是什么         简单的认为Quartz是是一个定时器。 1.1.下载 http://www.quartz-scheduler.org/downloads      核心接口      quartz的核心:Trigger,Job,J...

diyingshou8608的博客 221

定时任务JOB框架之Quartz (二) Quartz的进阶篇-多任务JOB

一、前言 在《定时任务JOB框架之Quartz (一) Quartz入门与快速Demo搭建》文章中创建的工程只有1个JOB在执行1个定时任务,在实际的应用场景中一般的项目少则十几个定时任务,多的几十上百个不等。实际应用中不可能把所有定时任务都写到一个JOB中,那样会造成: 1、一个定时任务的故障会导致后面的定时任务无法继续执行 2、代码也不好维护,太臃肿了 3、单个JOB执行一次的耗时也太...

anron的专栏 1883

springBoot-quartz-Job

SpringBoot整合Quartz -JOB 完整实用例子 1.首先新建项目SpringBoot-Quartzpom.xml依赖 : &lt;properties&gt; &lt;java.version&gt;1.8&lt;/java.version&gt; &lt;/properties&gt; &lt;dependencies&gt; &lt;dependenc...

CentOS 505

Spring Boot 与 Quartz 定时任务整合详解

在现代应用程序中,定时任务的执行是一个非常常见的需求,例如定时清理数据、定时生成报表等。而在Java生态系统中,Quartz是一个非常成熟的作业调度框架,它能够帮助我们轻松地管理复杂的定时任务。在本文中,我们将深入探讨如何将Quartz与Spring Boot整合,并通过实例演示如何实现各种定时任务的调度。

fudaihb的博客 2037

bert-ini:一种基于bert的实体对齐交互模型

本次分享一项来自IJCAI-20的实体对齐工作,该工作提出了一种不同于以往的采用图结构信息进行实体对齐的技术方案,该方案取得了当时的最好效果;不仅如此,模型本身的对齐效率在该项工作中也被考虑,实际工作中非常具备借鉴意义。

qq_33331424的博客 3152

SpringBoot整合Quartz实现动态任务,及在Job中注入Bean

Quartz是一个开源的任务调度框架。基于定时、定期的策略来执行任务是它的核心功能。如何和SpringBoot整合有很多教程。但是如何实现动态的任务管理,如删除、添加、修改定时任务,以及如何在Job中注入现有的Bean实现具体的业务功能,一般很少说到。本文结合具体的项目过程中的需求,实现了简单的解决方案。...

余金兑人的技术角落 5197

uniapp中renderjs实战:手把手教你实现SSE即时通讯(附完整代码)

本文通过一个完整的实战案例,详细讲解了如何在uni-app中使用RenderJS实现SSE即时通讯功能。文章剖析了RenderJS作为Vue视图层强力补充的原理,并提供了包含自动重连、状态管理等健壮性设计的完整代码,帮助开发者突破框架限制,高效集成浏览器原生API。

weixin_29005499的博客 190

springboot整合quartz

springboot集成调度框架quartz,各类定时框架比较

太上码农 1万+

告别手动标注!PDMS NakiToolkit插件安装与初体验:以Pipeline工具为例

本文详细介绍了PDMS NakiToolkit插件的安装与使用,特别是其Pipeline工具如何通过自动化标注和材料统计功能大幅提升三维工厂设计效率。从环境准备到实战演示,帮助工程师告别繁琐的手动标注工作,实现项目交付周期的大幅缩短。

weixin_30047059的博客 351

PDDL入门

PDDL的组成部分 Objects:对象,世界上我们感兴趣的事物。 Predicates:谓词,我们感兴趣的事实(例如对象的属性),可以为真,也可以为假。 An initial state:初始化状态,我们开始所处的世界状态,即开始时为真的事物。 Goal specification:目标状态,我们想要结束的世界的状态,即我们希望最终成为真实的事情。 Actions/Operators:动作/操作,改变世界状态的方式,即发生的事情改变了事实。 PDDL语法 PDDL 文件的扩展名通常是.pddl 要

工控小白2021的博客 4821

【学习笔记】Elastic-Job和Quartz 实现企业级定时任务

课程的总体介绍,定时任务的应用场景和发展趋势,以及分布式走时任务的介绍课程学习所必须的组件,包括JDK、MySQL、Zookeeper、Maven等快速入门Elastic-Job定时任务框架,并介绍Elastic-Job框架支持的3种任务类型:Simple、Dataflow、Script.使用3种方式整合Simple作业,分别是:Java APl、Spring和Spring Boot使用3种方式整合Dataflow作业,分别是:Java APl、Spring和Spring Boot。

ladymorgana的博客 1016

推理引擎终极对决:TensorRT vs ONNX Runtime,YOLOv8速度差30%的核心原因与实操指南

若你使用NVIDIA GPU,且追求极致速度和低延迟,TensorRT是唯一选择,尤其是边缘设备和实时场景;若你需要跨硬件部署、快速验证原型,或预算有限(无需NVIDIA GPU),ONNX Runtime是性价比之王;对于YOLOv8这类检测模型,TensorRT的FP16/INT8量化是“免费的速度提升”,建议优先采用。最后提醒:推理引擎的优化是“细节决定成败”——同样的引擎,不同的预处理方式、显存配置、批大小,都会导致10%-20%的性能差异。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1027

《SpringBoot中@Scheduled和Quartz的区别是什么?分布式定时任务框架选型实战》​

Scheduled是轻量级单机定时任务的便捷选择,而Quartz等框架则为企业级调度需求提供了完整的解决方案。在实际项目中,需根据任务复杂度、集群部署需求、运维成本等因素综合决策。对于Spring Boot应用,若后续可能演进为分布式架构,初期可优先考虑使用XXL-JOB或Elastic Job等云原生友好的调度中间件。

摘星编程的博客 1万+

基于YOLOv8的铁路轨道异物检测系统设计与实现

目标检测是计算机视觉领域的核心任务之一,旨在识别图像中特定目标的位置和类别。传统方法主要依赖手工特征(如HOG、SIFT等)和分类器(如SVM),而深度学习方法通过卷积神经网络自动学习特征表示,显著提升了检测性能。YOLO(You Only Look Once)系列算法作为单阶段目标检测的代表,以其高效的检测速度著称。YOLOv8是Ultralytics公司于2023年发布的最新版本,在精度和速度上都有进一步提升。

YOLO 574

复现报告:《多回路人机控制系统仿真及II型PIO分析》方法复现与代码实现

本文复现了谭文倩硕士论文《多回路人机控制系统仿真及II型PIO分析》中的关键方法,重点实现了频域驾驶员模型辨识和参数灵敏度分析。通过数字化提取论文图表数据,构建了结构驾驶员模型传递函数,并验证了参数变化对系统特性的影响。采用MATLAB实现了描述函数计算、模型参数辨识和灵敏度分析算法,为后续神经网络模型辨识和II型PIO研究奠定了基础。由于缺乏原始实验数据,部分结果通过数值模拟获得,但仍有效重现了论文的核心分析方法。~~~~~

huanghm88的专栏 175

SpringBoot+Quartz+Maven+MySql实现动态定时任务

昨天正好项目里面需要用到动态定时任务,就去看了看Quartz,网上很多代码都不全,或者步骤不够完善,有些说明也写的不清楚,今天我把我所有的源码和操作全部贴出来,帮助有需要的人,也给自己留个记录,废话少说,直接上代码。 1.Quartz需要导入的包,Maven配置 &amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;org.quartz-scheduler&amp;lt;/groupI...

懂点IT的博客 8850

注册GitHub时出现Unable to verify your captcha response.Please visit https://docs.github.com/解决方案(持续更新)

本文主要介绍了注册GitHub时出现Unable to verify your captcha response. Please visit https://docs.github.com/articles/troubleshooting-connectivity-problems/#troubleshooting-the-captcha for troubleshooting information.解决方案,希望能对学习使用GitHub的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 8万+

springboot整合Quartz实现定时任务

在项目中我们会有许多要进行定时执行逻辑的业务场景,比如定期生成日报、定期发送通知等。在遇到这些场景时,使用Quartz框架可以快速的完成功能。本文讲解了如何使用Quartz来开启一个简单的定时任务。

m0_74606902的博客 848

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

springboot quartz 只执行一次_使用Quartz创建一个定时任务

最近在工作中需要创建一些定时任务来处理业务,用到了定时调度工具-Quartz。于是班长我决定先行学习一番,并记录一下。目录 1 快速开发一个定时任务 2 Quartz任务启动流程分析 2.1 SpringBoot是如何加载启动Quartz的? 2.2 如何创建Schedule 2.3 如何启动调度任务对于新接触的工具框架,当然是先搭建一个简单的Dem...

weixin_34920577的博客 2613

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

SpringBoot集成Quartz实现动态定时任务

一、Quartz 简介 Quartz 是 OpenSymphony 开源组织在 Job Scheduling 领域又一个开源项目,是完全由 Java 开发的一个开源任务日程管理系统,“任务进度管理器”就是一个在预先确定(被纳入日程)的时间到达时,负责执行(或者通知)其他软件组件的系统。 Quartz 是一个开源的作业调度框架,它完全由 Java 写成,并设计用于 J2SE 和 J2EE 应用中,它提供了巨大的灵活性而不牺牲简单性 当定时任务愈加复杂时,使用 Spring 注解 @Schedule 已经不能满

微微~ 2396

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Quartz定时任务

任务调度是为了自动完成特定任务,在约定时刻去执行任务的过程。每个月初对用户进行缴费提醒每天定时12:00给用户发放优惠券@OverrideQuartzJobBean是实现了Job的一个抽象类,里面对原来的execute进行了修改(添加了Spring的一些东西),然后再调用executeInternal。源码如下,因此我们从原来的方式改成:继承QuartzJobBean并重新executeInternaltry {定义Jobimport com} }

GuoShao_的博客 2428

SpringBoot集成Quartz实现定时任务

Quartz官方文档_w3cschoolQuartz 存储方式有两种:MEMORY 和 JDBC。默认是内存形式维护任务信息,服务重启了任务就重新开始执行;而JDBC形式就是能够把任务信息持久化到数据库,虽然服务重启了,但根据数据库中的记录,任务还能继续执行。Quartz官方文档_w3cschoolQuartz 存储方式有两种:MEMORY 和 JDBC。默认是内存形式维护任务信息,服务重启了任务就重新开始执行;

Willow的博客 679

SpringBoot-定时任务Quartz

一、引入quartz相关的jar包        spring-context-support这个提供了MethodInvokingJobDetailFactoryBean和CronTriggerFactoryBean的实现 <dependency> <groupId>org.quartz-schedu...

Kasey_L的博客 373

SpringBoot整合Quartz实现定时任务

简介 Quartz是一个很牛的任务调度框架,通过它我们可以实现诸如:定时活动、延时活动、订单状态延时检测、服务器状态定时检测等,时间调度任务功能。 下面我们介绍一下它在SpringBoot中的使用: 1.配置Quartz 2.静态任务调度 3.动态任务调度 4.任务调度监听器 快速集成 快速集成体验一下Quartz的功能吧。 1.首先引入maven依赖 <!--Qua...

lisheng19870305的专栏 2461

【SpringBoot专题】SpringBoot快速集成Spring Task实现定时任务

【SpringBoot专题】SpringBoot集成Spring Task快速实现定时任务 🕌背景 在很多业务场景需要我们某一特定的时刻去做某件任务,这些任务是时间驱动的,因此定时任务解决的就是这种业务场景。 ♨️技术选型 快速实现的定时任务 Timer:是一个定时器类,通过该类可以为指定的定时任务进行配置。TimerTask类是一个定时任务类,该类实现了Runnable接口,缺点异常未检查会中止线程 ScheduledExecutorService:相对延迟或者周期作为定时任务调度,缺点没有绝对的

Java白羊的博客 628
上一篇: json序列化与反序列化
下一篇: git使用(1)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值