一、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】的更多相关文章

  1. 【Quartz】配置最简单的集群

    在许多情况,我们希望我们的定时任务是可靠的,不会因系统故障.机器宕机而导致某一笔定时任务不能按时运行.这种情况下,我们就需要为Quartz做个集群. 最简单的情况,有两台机器或两个应用,同时维护一批定 ...

  2. 【Quartz】定时器初步实验(一)

    原文:[Quartz]定时器初步实验(一)     以前就了解了Quartz这个定时框架,但是一直没有认真的去关注他,最近忽然看到已经更新到3.0.4支持异步操作了所以就写个简单的小例子看看好用不. ...

  3. 【Quartz】常用方法的使用方式(三)

    前言    总结了一下quartz组件的一些常用方法,以备将来不时之需.哈哈,看着挺简单有些好是值得笔记一下的.好记性不如烂笔头吗? 代码部分: 方法类内容: public class Example ...

  4. 【Quartz】问题记录注意事项【四】

    记录一:queartz 在同时启动多个任务是,触发器名称不能设置一致,不然第二次启动会不成功 记录二:quartz 在使用任务与触发器分离写法时,任务必须要带(.StoreDurably()) IJo ...

  5. 【Quartz】Quartz将Job保存在数据库中所需表的说明

    QRTZ_CALENDARS 以 Blob 类型存储 Quartz 的 Calendar 信息 QRTZ_CRON_TRIGGERS 存储 Cron Trigger,包括 Cron表达式和时区信息  ...

  6. 【Quartz】Quartz存储与持久化-基于quartz.properties的配置

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 一.   Quartz存储与持久化 Quartz提供两种基本作业存储类型.第一种类型叫做RAM ...

  7. 【Quartz】将定时任务持久化到数据库

    之前的文章所做的demo是将定时任务的信息保存在内存中的,见以下配置 org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore 如果,我们需要在 ...

  8. 【Quartz】Quartz的搭建、应用(单独使用Quartz)

    Quartz在Java构建的系统中,是十分常用的定时任务框架. 本文,记录.介绍Quartz的简单入门的单独搭建(此文入门学习Quartz为主,并非基于Spring托管形式). > 参考的优秀资 ...

  9. 【quartz】 理论知识

    属性的介绍 1.调度器属性:分别设置调度器的实例名(instanceName) 和实例 ID (instanceId).属性 org.quartz.scheduler.instanceName 可以是 ...

  10. 【quartz】 数据库方式管理任务

    public static void Run(bool inClearJobs, bool inScheduleJobs) { var properties = new NameValueCollec ...

随机推荐

  1. C# 利用Autofac批量接口注入依赖【学习记录】

    背景: 本人在一位大佬的Colder框架中看到了这个接口注入,然后呢就想学习一下ioc思想与di设计模式.此写法给我的感觉就是 非常的 优雅 ,优雅永不过时.关于接口注入的概念和ioc和di具体是什么 ...

  2. categraf托管与自升级

    categraf支持多种方式进行部署.托管,社区里部署和管理categraf也是五花八门,大家自己使用方便即可. 之前我们觉得大家通过ansible之类的工具批量下发/更新就能很简单地完成任务,最近很 ...

  3. Vue学习:14.工程化开发&脚手架

    0基础如何进入IT行业? 简介:对于没有任何相关背景知识的人来说,如何才能成功进入IT行业?是否有一些特定的方法或技巧可以帮助他们实现这一目标? 方向一:学习路径 1.明确兴趣和目标:首先确定你对IT ...

  4. LangChain结合LLM做私有化文档搜索

    我们知道LLM(大语言模型)的底模是基于已经过期的公开数据训练出来的,对于新的知识或者私有化的数据LLM一般无法作答,此时LLM会出现"幻觉".针对"幻觉"问题 ...

  5. [一句话说iOS]dispatch如何造成死锁

    dispatch_sync执行了两件事:把代码块放入指定线程的任务队列中.堵塞当前线程直到代码块执行结束,如果出现了堵塞的线程和代码块所在的线程为同一线程的话,这个时候代码无法在此线程执行继续下去,即 ...

  6. java+SpringCloud开发的性能和环保问题

    对于大部分商业应用开发程序员而言,使用java+spring是一件幸福的事情. 一般情况下,我们使用cloud开发不是那么重要.精密的应用,这些应用包括例如大型的商业交易,社区等等. 因为这些应用天然 ...

  7. Codeforces 1868C/1869E Travel Plan 题解 | 巧妙思路与 dp

    为了更好的阅读体验,请点击这里 题目链接:Travel Plan 题目大意:\(n\) 个点的完全二叉树,每个点可以分配 \(1 \sim m\) 的点权,定义路径价值为路径中最大的点权,求所有路径的 ...

  8. 深入理解Spring AOP中的@EnableAspectJAutoProxy

    本文分享自华为云社区<Spring高手之路20--深入理解@EnableAspectJAutoProxy的力量>,作者: 砖业洋__. 1. 初始调试代码 面向切面编程(AOP)是一种编程 ...

  9. 嵌入式编程的 4 种模型:轮询、中断、DMA、通道

    轮询方式 对I/O设备的程序轮询的方式,是早期的计算机系统对I/O设备的一种管理方式.它定时对各种设备轮流询问一遍有无处理要求.轮流询问之后,有要求的,则加以处理.在处理I/O设备的要求之后,处理机返 ...

  10. C#/.NET/.NET Core编程技巧练习集(学习,实践干货)

    DotNet Exercises介绍 DotNetGuide专栏C#/.NET/.NET Core编程常用语法.算法.技巧.中间件.类库练习集,配套详细的文章教程讲解,助你快速掌握C#/.NET/.N ...