【Quartz】
一、Quartz概述
Quartz是用来做定时任务调度的JavaEE框架
需求场景:
1、在每个月末,自动网易云会员续费,或者百度云盘会员续费
2、在迅雷下载完一个超过10G的资源的30秒之后自动关机
也就是说我们希望在某一个特定的时刻,去执行一些事情
二、快速入门
POM坐标:
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.2</version>
</dependency>
打开右侧的Maven菜单工具,可以看到Quartz的依赖项,包含了两个数据源

编写一个类并且实现Job接口,重写接口的execute方法
package cn.dzz.quartz; import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; /**
* @author Echo42
* @file Quartz
* @create 2020年09月12日16:53
* @description
*/
public class HelloQuartz implements Job { public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
// 我们希望执行的逻辑
System.out.println("Hello Quartz !!!");
}
}
编写可运行的方法【Main或者JunitTest】
package cn.dzz; import cn.dzz.quartz.HelloQuartz;
import org.junit.Test;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory; import java.util.GregorianCalendar; /**
* @author Echo42
* @file Quartz
* @create 2020年09月12日16:56
* @description
*/
public class QuartzTest { @Test
public void testQuartzSample() throws SchedulerException {
// 1、调度器对象
Scheduler defaultScheduler = StdSchedulerFactory.getDefaultScheduler(); // 2、触发器对象 ,指定执行事件如何触发
SimpleTrigger simpleTrigger = TriggerBuilder.
newTrigger(). // 创建新的触发器
withIdentity("trigger01", "group01"). // 触发器实例的标识信息
startNow(). // 从什么时候开始触发执行
withSchedule( // 如何调度执行的规则
SimpleScheduleBuilder.
simpleSchedule().
withIntervalInSeconds(10).
repeatForever()
).
endAt( // 从什么时候结束执行
new GregorianCalendar(2020, 10, 2, 14, 26, 33).
getTime()
).
build(); // 3、职责详细 JobDetail
JobDetail jobDetail = JobBuilder.newJob(HelloQuartz.class).withIdentity("trigger01", "group01").build(); // 4、把职责详细对象和触发器对象注入到调度器对象中
defaultScheduler.scheduleJob(jobDetail, simpleTrigger); // 5、启动调度器
defaultScheduler.start();
}
}
单元测试的结果,没反应?直接结束了
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Process finished with exit code 0
换成main执行:
这才有效了。。。。

执行的上下文参数:
package cn.dzz.quartz; import org.quartz.*; /**
* @author Echo42
* @file Quartz
* @create 2020年09月12日16:53
* @description
*/
public class HelloQuartz implements Job { public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
// 我们希望执行的逻辑
System.out.println("Hello Quartz !!!"); // 除此之外,还可以获取调用此Job类的标识
JobDetail jobDetail = jobExecutionContext.getJobDetail();
JobKey jobDetailKey = jobDetail.getKey();
String name = jobDetailKey.getName(); // trigger01
String group = jobDetailKey.getGroup(); // group01
}
}
Quartz的外部配置文件:
# quartz.properties 不可以更改配置文件名称,默认位置classpath目录下面。
# 如果没有此配置文件,Quartz会按照默认配置执行 # 指定调度器名称,非实现类?
org.quartz.scheduler.instanceName = DefaultQuartzScheduler # 指定线程池实现类
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool # 线程池数量
org.quartz.threadPool.threadCount = 10 # 优先级,默认5
org.quartz.threadPool.threadPriority = 5 # 非持久化job
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
核心类:
1、Scheduler 调度器,控制所有调度,Quartz的核心API,管理了所有任务
2、Job 任务,即我们希望Quartz管理的业务逻辑定义
3、JobDetail 任务详细,对Job对象的进一步封装,指定更详细的属性
4、Trigger 触发器,绑定任务,规定任务执行的触发规则
三、两种触发器:
SimpleTrigger & CronTrigger
1、SimpleTrigger 以一定时间范围内执行的任务,指定起始时间和截止时间,指定时间间隔与次数
// 2、触发器对象 ,指定执行事件如何触发
SimpleTrigger simpleTrigger = TriggerBuilder.
newTrigger(). // 创建新的触发器
withIdentity("trigger01", "group01"). // 触发器实例的标识信息
startNow(). // 从什么时候开始触发执行
withSchedule( // 如何调度执行的规则
SimpleScheduleBuilder.
simpleSchedule(). //
withIntervalInSeconds(10).
repeatForever()
).
endAt( // 从什么时候结束执行
new GregorianCalendar(2020, 10, 2, 14, 26, 33).
getTime()
).
build();
2、用来规定更为复杂的触发规则,支持Linux Cron的语法,
只需要Cron表达式即可,关于Cron表达式的详细介绍:
https://www.cnblogs.com/yanghj010/p/10875151.html
【Quartz】的更多相关文章
- 【Quartz】配置最简单的集群
在许多情况,我们希望我们的定时任务是可靠的,不会因系统故障.机器宕机而导致某一笔定时任务不能按时运行.这种情况下,我们就需要为Quartz做个集群. 最简单的情况,有两台机器或两个应用,同时维护一批定 ...
- 【Quartz】定时器初步实验(一)
原文:[Quartz]定时器初步实验(一) 以前就了解了Quartz这个定时框架,但是一直没有认真的去关注他,最近忽然看到已经更新到3.0.4支持异步操作了所以就写个简单的小例子看看好用不. ...
- 【Quartz】常用方法的使用方式(三)
前言 总结了一下quartz组件的一些常用方法,以备将来不时之需.哈哈,看着挺简单有些好是值得笔记一下的.好记性不如烂笔头吗? 代码部分: 方法类内容: public class Example ...
- 【Quartz】问题记录注意事项【四】
记录一:queartz 在同时启动多个任务是,触发器名称不能设置一致,不然第二次启动会不成功 记录二:quartz 在使用任务与触发器分离写法时,任务必须要带(.StoreDurably()) IJo ...
- 【Quartz】Quartz将Job保存在数据库中所需表的说明
QRTZ_CALENDARS 以 Blob 类型存储 Quartz 的 Calendar 信息 QRTZ_CRON_TRIGGERS 存储 Cron Trigger,包括 Cron表达式和时区信息 ...
- 【Quartz】Quartz存储与持久化-基于quartz.properties的配置
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 一. Quartz存储与持久化 Quartz提供两种基本作业存储类型.第一种类型叫做RAM ...
- 【Quartz】将定时任务持久化到数据库
之前的文章所做的demo是将定时任务的信息保存在内存中的,见以下配置 org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore 如果,我们需要在 ...
- 【Quartz】Quartz的搭建、应用(单独使用Quartz)
Quartz在Java构建的系统中,是十分常用的定时任务框架. 本文,记录.介绍Quartz的简单入门的单独搭建(此文入门学习Quartz为主,并非基于Spring托管形式). > 参考的优秀资 ...
- 【quartz】 理论知识
属性的介绍 1.调度器属性:分别设置调度器的实例名(instanceName) 和实例 ID (instanceId).属性 org.quartz.scheduler.instanceName 可以是 ...
- 【quartz】 数据库方式管理任务
public static void Run(bool inClearJobs, bool inScheduleJobs) { var properties = new NameValueCollec ...
随机推荐
- kettle从入门到精通 第三十课 mysql 数据连接常用配置
1.我们平常用的最多的数据库就是mysql了,这里我以mysql为例说下数据库连接池配置.为啥要用连接池,因为数据库建立连接很费性能,所以就建立连接池(提前建立好一批连接)缓存起来提高性能.下图中my ...
- 如何基于R包做GO分析?实现秒出图
GO分析 基因本体论(Gene Ontology, GO)是一个用于描述基因和基因产品属性的标准术语体系.它提供了一个有组织的方式来表示基因在生物体内的各种角色.基因本体论通常从三个层面对基因进行描述 ...
- MoneyPrinterPlus:AI自动短视频生成工具,赚钱从来没有这么容易过
这是一个轻松赚钱的项目. 短视频时代,谁掌握了流量谁就掌握了Money! 所以给大家分享这个经过精心打造的MoneyPrinterPlus项目. 它可以:使用AI大模型技术,一键批量生成各类短视频. ...
- vitepress使用createContentLoader时遇到["vitepress" resolved to an ESM file. ESM file cannot be loaded by `require`.]报错
在使用vitepress构建一个所有博客的概览页的时候,使用到了createContentLoader这个api,但是在index.data.ts中定义并导出后,在md文件中调用遇到了下面这个问题: ...
- gradle dependencies 查找jar导入OR解决jar冲突
在gradle项目中,使用gradle dependencies先查询jar包的导入关系.然后找到导入的jar加入到项目中来.解决jar冲突等问题. 类似格式如下: annotationProcess ...
- Android日志系统(logging system)
Android日志系统(logging system) 背景 不管是做Android应用还是做Android中间层和底层,在做一些调试工作的时候,使用adb logcat非常关键.特意学习了一下安卓的 ...
- Android 8.0 开机时间优化
Android 8.0 开机时间优化 背景 在嵌入式行业中,有些搭载 了Android系统的设备由于 开机时间 过长而导致无法被接受. 介绍 启动时间是系统性能的重要组成部分,因为用户必须等待启动完成 ...
- 一个JVM参数,服务超时率降了四分之三
先说结论:通过优化Xms,改为和Xmx一致,使系统的超时率降了四分之三 1. 背景 一个同事说他负责的服务在一次上线之后超时率增加了一倍 2. 分析 2.1 机器的监控 首先找了一台机器,看了监控 上 ...
- P6655 题解
直接计数其实不好记,不如计数转期望. 令 \(f_i\) 表示点 \(i\) 成为制高点概率,不难发现期望就是 \(\sum f_i\). 根据定义对于 \(f\) 我们有如下转移 \(f_i = \ ...
- 【Playwright+Python】系列教程(四)Pytest 插件在Playwright中的使用
一.命令行使用详解 使用Pytest插件在Playwright 中来编写端到端的测试. 1.命令行执行测试 pytest --browser webkit --headed 2.使用 pytest.i ...