Springboot整合quartz

SpringBoot整合Quartz 目录`Quartz` 简介 Quartz 简介 Quartz 是一款功能强大的开源任务调度框架,几乎可以集成到任何 Java 应用程序中(小到单机应用,大到分布式应用)。Quartz 可用于创建简单或复杂的任务调度,用以执行数以万计的任务。任务被定义为标准化的 Java 组件,Java 编写的任务都可以被执行 Quartz 是一个任务日程管理系统,一个在预先确定(被纳入日程)的时间到达时,负责执行(或者通知)其他软件组件的系统 Quartz 用一个小 Java 库发布文件(.jar文件),这个库文件包含了所 阅读详情

1. Quartz介绍

Quartz是一个功能丰富的开源作业调度框架,可以集成到几乎任何Java应用程序中,从最小的独立应用程序到最大的电子商务系统。Quartz可以创建简单或复杂的调度,用于执行数十、数百甚至数万个作业;其Job被定义为标准的Java组件,可以执行任何指定的任务。Quartz调度程序包含许多企业级特性,例如对JTA事务和集群的支持。

Quartz有三个重要的核心元素,任务调度器(Scheduler),触发器(Trigger),任务(Job)。

 

image.png

 

2. Springboot整合Quartz

2.1 Springboot应用添加依赖

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

 

2.2 添加Quartz配置文件

resources资源文件夹下添加quartzConfig.properties文件内容如下:

# ===========================================================================
# Configure Main Scheduler Properties 调度器属性
# ===========================================================================

#调度器实例名称 集群中每一个实例都必须使用相同的名称
org.quartz.scheduler.instanceName=quartzClusterScheduler

#调度器实例编号自动生成
org.quartz.scheduler.instanceId=AUTO

#============================================================================
# ThreadPool
#============================================================================

#线程池的实现类(一般使用SimpleThreadPool即可满足几乎所有用户的需求)
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool

#指定线程数,至少为1(无默认值)(一般设置为1-100直接的整数合适)
org.quartz.threadPool.threadCount = 25

#设置线程的优先级(最大为java.lang.Thread.MAX_PRIORITY 10,最小为Thread.MIN_PRIORITY 1,默认为5)
org.quartz.threadPool.threadPriority = 5

#============================================================================
# JobStore
#============================================================================

# 信息保存时间 默认值60秒
org.quartz.jobStore.misfireThreshold = 1000

#数据保存方式为数据库持久化
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreCMT

#数据库代理类
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate

#JobDataMaps是否都为String类型
org.quartz.jobStore.useProperties = false

#表的前缀,默认QRTZ_
org.quartz.jobStore.tablePrefix = QRTZ_

#开启分布式部署
org.quartz.jobStore.isClustered = true

#分布式节点有效性检查时间间隔,单位:毫秒
org.quartz.jobStore.clusterCheckinInterval = 20000

2.3 Quartz配置类

Quartz配置类读取配置文件信息,配置数据源,注入bean:schedulerFactoryBean,quartzProperties,scheduler实例。此外,在配置类中job,trigger,scheduler创建并主测监听器。

/**
 * job工厂
 *
 * @author xingnana
 * @create 2020-01-10
 */
@Component("jobFactory")
public class JobFactory extends AdaptableJobFactory {

    //AutowireCapableBeanFactory 可以将一个对象添加到SpringIOC容器中,并且完成该对象注入
    @Autowired
    private AutowireCapableBeanFactory autowireCapableBeanFactory;


    /**
     *
     * 将实例化的任务对象手动添加到Spring容器中,完成对象的注入,否则程序会报空指针异常
     * @param bundle
     * @return
     * @throws Exception
     */
    @Override
    protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
        Object jobInstance=super.createJobInstance(bundle);
        this.autowireCapableBeanFactory.autowireBean(jobInstance);
        return jobInstance;
    }
}

 

2.4 Quartz监听器

Quartz的监听器用于当任务调度中你所关注事件发生时,能够及时获取这一事件的通知。类似于任务执行过程中的邮件、短信类的提醒。Quartz监听器主要有JobListener、TriggerListener、SchedulerListener三种,顾名思义,分别表示任务、触发器、调度器对应的监听器。

三者的使用方法类似,在开始介绍三种监听器之前,需要明确两个概念:全局监听器与非全局监听器,二者的区别在于:全局监听器能够接收到所有的Job/Trigger的事件通知,而非全局监听器只能接收到在其上注册的Job或Trigger的事件,不在其上注册的Job或Trigger则不会进行监听。关于全局与非全局的监听器的使用,在本文中会做一介绍。

/**
 * Job 监听器
 *
 * @author xingnana
 * @create 2020-01-17
 */
@Slf4j
public class JobMonitorListener extends JobListenerSupport {

    /**
     * 获取该JobListener的名称
     * @return
     */
    @Override
    public String getName() {
        String name = getClass().getSimpleName();
        log.info("Job监听器名字:{}",name);
        return name;
    }

    /**
     * Job将要被执行
     * @param jobExecutionContext
     */
    @Override
    public void jobToBeExecuted(JobExecutionContext jobExecutionContext) {
        JobDetail jobDetail=jobExecutionContext.getJobDetail();
        JobKey jobKey=jobDetail.getKey();
        Trigger trigger=jobExecutionContext.getTrigger();
        log.info("Job将要被执行, jobName: {}, jobGroup: {}, jobDetail: {}, trigger: {}",jobKey.getName(),jobKey.getGroup(),
                JSON.toJSONString(jobDetail), JSON.toJSONString(trigger));
    }

    /**
     * Job被拒绝执行
     * @param jobExecutionContext
     */
    @Override
    public void jobExecutionVetoed(JobExecutionContext jobExecutionContext) {
        JobDetail jobDetail=jobExecutionContext.getJobDetail();
        JobKey jobKey=jobDetail.getKey();
        log.info("Job被TriggerListener拒绝执行, jobName: {}, jobGroup: {}, jobDetail: {}",jobKey.getName(),jobKey.getGroup(), JSON.toJSONString(jobDetail));
    }

    /**
     * Job执行后
     * @param jobExecutionContext
     * @param e
     */
    @Override
    public void jobWasExecuted(JobExecutionContext jobExecutionContext, JobExecutionException e) {
        JobDetail jobDetail=jobExecutionContext.getJobDetail();
        JobKey jobKey=jobDetail.getKey();
        log.info("Job执行完成, jobName: {}, jobGroup: {}, jobDetail: {}",jobKey.getName(),jobKey.getGroup(), JSON.toJSONString(jobDetail));


    }


}

 

2.5 实现定时任务执行类

实现定时任务执行类,该类实现Job接口。方法execute是job被触发后执行的方法。如每天下午6点发送邮件。则在下午6点时,该类中的方法execute被触发调用,然后执行发邮件的操作。

/**
 * 定时任务执行
 *
 * @author xingnana
 * @create 2020-02-28
 */
@Slf4j
@Service("timerTaskRunService")
public class TimerTaskRunService implements Job {

    public static String QUARTZ_AUTO_RUN = "quartz-auto-run";

    // 定时任务运行类
    public static String TIMER_TASK_RUN_CLASS = "com.tuya.ci.testbook.service.task.TimerTaskRunService";

    @Resource
    private IAsyncService asyncService;


    /**
     * 执行job
     *
     * @param jobExecutionContext
     * @throws JobExecutionException
     */
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        Scheduler scheduler = jobExecutionContext.getScheduler();
        JobKey jobKey = jobExecutionContext.getJobDetail().getKey();

        try {

            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
            log.info("调度器instanceId: {}, instanceName: {}, 当前执行线程: {}", scheduler.getSchedulerInstanceId(), scheduler.getSchedulerName(), Thread.currentThread());

            if (jobExecutionContext.isRecovering()) {
                log.info("作业被恢复:jobName: {}, jobGroup: {}, recovering at {}", jobKey.getName(), jobKey.getGroup(), sdf.format(new Date()));
            } else {
                log.info("作业被执行:jobName: {}, jobGroup: {}, starting at {}", jobKey.getName(), jobKey.getGroup(), sdf.format(new Date()));
            }

            // todo 异步 查询待执行定时任务 & 并执行测试任务


        } catch (SchedulerException e) {

            log.warn("调度器异常,无法运行测试任务, jobName: {}, jobGroup: {}, SchedulerException异常信息: \n{}",
                    jobKey.getName(), jobKey.getGroup(), com.tuya.ci.testbook.service.util.StringUtil.getStackTraceAsString(e));


        } catch (Exception e) {

            log.warn("调度器异常,无法运行测试任务, jobName: {}, jobGroup: {}, Exception异常信息: \n{}",
                    jobKey.getName(), jobKey.getGroup(), com.tuya.ci.testbook.service.util.StringUtil.getStackTraceAsString(e));
        }
    }
}

 

Springboot 整合 Quartz(定时任务框架) Quartz是 OpenSymphony 开源组织在 Job scheduling 领域又一个开源项目,完全由 Java 开发,可以用来执行定时任务,类似于 java.util.Timer。持久性作业 - 就是保持调度定时的状态;作业管理 - 对调度作业进行有效的管理; 阅读详情

相关推荐

【微服务】springboot整合quartz使用详解

springboot整合quartz详解

congge_study的博客 7302

Spring Boot 集成 Quartz(任务调度框架)

Quartz 是完全由Java开发的作业调度框架,当定时任务愈加复杂时,使用Spring注解@Schedule已经不能满足业务需要。} }return JobBuilder . newJob(SampleJob . class) . withIdentity("job" , "group") . withDescription("任务描述:内存方式运行") . storeDurably() . build();} }

欲变世界,先变其身 6257

手把手教你用DCA1000EVM解析IWR6843毫米波雷达数据(附MATLAB代码)

本文提供了一份详尽的实战指南,手把手教你使用DCA1000EVM采集并解析TI毫米波雷达IWR6843的原始数据。内容涵盖硬件连接配置、mmWave Studio参数设置、LVDS数据流结构解析,并附有核心MATLAB代码,详细演示了从原始二进制文件到距离-速度谱的信号处理全链路,帮助开发者快速掌握数据解析与处理的关键步骤。

terraform7cloud的博客 227

springboot集成quartz

引用上一篇博客的说法springboot整合xxl-job,集群模式下,定时任务会造成很严重的事故,其次普通的任务也无法做到像xxl-job与Quartz 一样,及时启停,修改等;上一篇介绍了xxl-job,这篇搞一下Quartz,老牌分布式定时任务了;基本实现了任务的动态添加有参数的具体任务调用,修改QuartzJob中的方法获取,参数获取等,但是依旧采用代理实现任务并发执行未处理,后续完善项目地址。

学海无涯,我用JAVA 4149

Docker篇——Docker常用命令大全!史上最全面的Docker命令,涵盖常规命令、镜像基本命令、容器基本命令以及常用其他命令,一篇文章速通!

本篇文章介绍的关于DOcker的命令非常全面,Docker常见的命令介绍完毕,涉及到的命令比较繁杂,希望大家可以收藏并坚持学习。后续还会持续更新相关技术点,敬请期待

我热爱学习,也乐于分享。无论是科技前沿的洞见,还是生活中的小技巧,我都会在这里与你分享。我相信,知识就是力量,而分享则能让这份力量得到更好的传递。 5746

类银河恶魔城学习记录1-1 Player状态机的搭建 P28

什么是状态机?一篇文章就够了 - 知乎说实话,目前并不能深入理解状态机的奇妙之处(当然,我觉得状态机作为教程的重要组成部分是不得不理解的,所以以下我会对游戏教程内的状态机做一些我认为的解释,如有错误,请多包涵)

Homura_的博客 2340

spring boot集成quartz

创建配置文件实现ApplicationRunner接口,实现run方法,在方法中,首先通过反射方式获取到要执行定时任务的类来创建jobdetail,然后根据执行规则创建执行的触发器trigger,再将jobdetail和trigger放到scheduler容器中,按照规则进行任务的执行。定时任务的全路径名称,执行的触发器以及任务名称,可以存放在数据库中,并在前端追加可视化画面来进行修改,删除及立即执行的功能。Quartz 中需要执行的任务详情,包括了任务的唯一标识和具体要执行的任务,可以通过。

m0_72167535的博客 3523

在pycharm2021.2中学习opencv图像处理,基于python3.9.7、pycharm完成配置

在pycharm中学习opencv图像处理安装python下载python安装包开始安装安装pycharm社区版下载pycharm开始安装如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 安装python 使用pycharm学习opencv应该是最简单的了,对新手比较友好,

steveqobs 7708

Spring Boot整合Quartz使用的详解

在Quartz中,Job的执行逻辑是通过实现接口的execute方法来定义的。execute方法接收一个参数,该参数包含了执行上下文信息,如JobDetail、Trigger等。可以在execute方法中编写你的任务逻辑,例如调用其他服务或执行数据库操作。// 在这里编写你的任务逻辑 System . out . println("定时任务执行了!");// 调用其他服务或执行数据库操作 // ... } }

chen520的博客 6375

ESP32 LVGL开发板例程使用记录:自制常用汉字字库(二)

1、将下载的文件移入工程文件中 ,路径为项目文件中 ”......\lib\lvgl\src\font“文件夹下。3、修改字库配置文件,文件名为lv_conf.h中的内容,向其中加入下面内容(位置可搜索注释块来找到地方)修改完成可以编译试试,看是否成功,如字库较大时编译出错,请使能:LV_FONT_FMT_TXT_LARGE。2、打开此文件,修改包含头文件的路径,不然会报错,修改方法可对照自己库中其他字库文件中的包含路径。导入完成后在VSCode工程中可以查看到此文件。上次说完了如何制作 字库.c 文件。

qq_43279097的博客 1959

excel wind插件使用_Python和wind的交互—在债券中的应用

个人认为学会了怎么用python和wind交互以及怎么用python处理Excel数据,就基本能替换日常很多琐碎的债券工作,还不用担心Excel某个值改变了导致整个报表都毁了。事实上在python调用wind函数和在Excel中调用函数一样简单,只要会基本的操作就够了。下面详细的介绍如何用python和wind进行交互。首先安装好python+pycharm+wind。因为python...

weixin_39863918的博客 5330

Springboot 整合Quartz

springboot整合quartz相关基本配置

yang_fei9264的博客 8119

小白学习图像处理6——Canny边缘检测算法原理

目录结构一、高斯滤波二、梯度计算1、原理2、代码如下三、非极大值抑制三、双阈值检测四、matlab 的 edge函数五、总结 Canny边缘检测算法主要步骤:高斯滤波、梯度计算、非极大值抑制和双阈值检测。 一、高斯滤波   使用高斯滤波的目的是平滑图像,滤除图像中的部分噪声(因为微分算子对噪声很敏感)。高斯滤波具体办法是生成一个高斯模板,使用卷积进行时域滤波: img = im2double(im...

我有两颗糖 7791

Springboot:整合Quartz

Springboot:整合Quartz一

拒绝熬夜啊的博客 3870

华为MetaERP在财务模块(GL/AP/AR/FA)及子账模块效率优化、月末关账加速、与外部系统对账方面,已形成一套**“并行+实时+智能化”**的完整技术方案

华为MetaERP推出"并行+实时+智能化"技术方案,显著提升财务模块效率:1)采用三级并行策略和内存计算,使子账模块单任务处理时间从142分钟降至9分钟;2)通过并行关账架构将月末关账时间从68小时压缩至7.2小时;3)运用AI智能对账提升效率50%,并支持异步流程和区块链审计。典型场景测试显示月结耗时下降89%,CPU利用率提升116%。方案建议分阶段实施,注意依赖分析、任务粒度设计和性能监控,避免过度并行。该方案已有效解决大型集团财务处理效率低、关账慢、对账难等痛点。

金牌架构师 559

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

springboot整合quartz

Data;import org/*** @Description: quartz自定义数据源配置/*** @Description: quartz自定义数据源配置/*** @Description: quartz自定义数据源配置/*** @Description: quartz自定义数据源配置import org/*** @Description: quartz自定义数据源配置/**

ww_bdl的博客 953

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

springBoot整合quartz持久化

weixin_35815479的博客 2713

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

springboot与quartz整合

目录前言pom配置文件pom.xml配置resources配置文件application.ymlquartz.propertiesquartz整合文件MySql: quartz必用核心数据库Druid: 改变quartz默认的数据源(不是druid数据源的就不用了)config: 配置自己的quartz文件(需要spring帮忙)使用案例quartzControllerScheduleTrigge...

旺旺的博客 1084

Java框架_SpringBoot整合Quartz

一、Quartz的介绍以及Quartz的使用思路        Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。job - 任务 - 你要做什么事?Trigger...

邻家丶乖乖女的专栏 2710

Springboot 整合 quartz,使用spring-boot-starter-quartz获取jobDataMap数据遇到的坑

实现技术:项目中通过Springboot整合quartz,使用spring-boot-starter-quartz实现可配置定时任务。 场景:定时任务执行需要使用到一些其他的参数,在创建定时任务时将参数设置到jobDataMap中并持久化到`QRTZ_JOB_DETAILS`表中的`JOB_DATA`字段,该字段为blob类型,前端展示定时任务信息是需要展示到参数数据 这里不介绍怎么使用...

haohao_ding的博客 7010

【SpringBoot整合系列】SpringBoot整合定时任务【Quartz】

SpringBoot整合定时任务

低调做人,低调编码,神码都是浮云 2553
上一篇: Quartz定时任务偶现没有按时触发问题排查
下一篇: Springboot自动配置
Claire0118
博客等级 码龄15年 52粉丝 81原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值