Quartz基本使用
1.Quartz概述:简单的说就是java的一个定时任务的框架,没有那么复杂的解释,跟前端的定时器一样。在了解它之前,首先熟悉几个概念。
2.基本概念
2.1 Job:表示一个工作,要执行的具体内容。此接口中只有一个方法 void execute(JobExecutionContext context)
2.2 JobDetail:JobDetail 表示一个具体的可执行的调度程序, Job 是这个可执行程调度程序所要执行的内容,另外 JobDetail 还包含了这个任务调度的方案和策略。
2.3 Trigger 代表一个调度参数的配置,什么时候去调。
2.4 Scheduler 代表一个调度容器,一个调度容器中可以注册多个 JobDetail 和 Trigger。当Trigger 与 JobDetail 组合,就可以被 Scheduler 容器调度了。
解释:
l 编写 job 实现业务,要做什么具体事情问题。
l 使用 JobDetail 包装 job,是任务对象,可以被调度
l 使用 Trigger (触发器对象)定制什么时候去调用某任务对象。
l 使用 Scheduler 结合任务对象和触发器对象,很像一个大管家。
3.运行原理

下面实例:开启大管家,启动,关闭
引入相应的jar包
<dependencies>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.3</version>
</dependency>
<!-- slf4j log4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
Job:
package com.quartz.job; import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; public class HelloJob implements Job { /*
* set方法
* */
private String message; private Float math; public String getMessage() {
return message;
} public void setMessage(String message) {
this.message = message;
} public Float getMath() {
return math;
} public void setMath(Float math) {
this.math = math;
} @Override
public void execute(JobExecutionContext context)throws JobExecutionException { /*String mes = (String) context.getJobDetail().getJobDataMap().get("message");
System.out.println("jobdetail's message: "+mes); Float ms = (Float) context.getTrigger().getJobDataMap().get("math");
System.out.println("trigger's math: "+ms);*/ System.out.println("jobdetail's message: "+message);
System.out.println("trigger's math: "+math);
System.out.println("业务逻辑处理中...");
}
}
jobdetail,Trigger ,Scheduler :
package com.quartz.scheduler; import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory; import com.quartz.job.HelloJob; public class TestQuartz {
public static void main(String[] args) throws SchedulerException, InterruptedException { // 定义jobdetail
JobDetail jb = JobBuilder.newJob(HelloJob.class)
.withIdentity("myjob", "group1")
.usingJobData("message", "hello,Myjobdetail")
.build(); System.out.println("jobDetail's name: "+jb.getKey().getName());
System.out.println("jobDetail's group: "+jb.getKey().getGroup());
System.out.println("jobDetail's jobclass: "+jb.getJobClass().getName()); // 定义trigger
CronTrigger trigger = TriggerBuilder.newTrigger()
.withIdentity("mytrigger","group1")
.startNow()
.usingJobData("math", 3.15f)
// .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever())
.withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ? *"))
.build(); // 创建scheduler
StdSchedulerFactory ssf = new StdSchedulerFactory();
Scheduler sc = ssf.getScheduler();
sc.start();
sc.scheduleJob(jb, trigger); // 两秒挂起
Thread.sleep(2000L);
sc.standby(); Thread.sleep(2000L);
sc.start(); // sc.shutdown(false); //直接关闭Scheduler
// sc.shutdown(true); //执行完所有的job后关闭Scheduler }
}
这里需要理解一下standBy(),该方法是让scheduler挂起,要想开始直接调用start()方法。shutdown(false)该方法是shutdown()直接关闭scheduler,而shutdown(true)表示等待执行完所有的job后关闭Scheduler。
Quartz基本使用的更多相关文章
- 免费开源的DotNet任务调度组件Quartz.NET(.NET组件介绍之五)
很多的软件项目中都会使用到定时任务.定时轮询数据库同步,定时邮件通知等功能..NET Framework具有“内置”定时器功能,通过System.Timers.Timer类.在使用Timer类需要面对 ...
- Quartz
Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中.它提供了巨大的灵 活性而不牺牲简单性.你能够用它来为执行一个作业而创建简单的或复杂的调度. eg: ja ...
- Spring Quartz实现任务调度
任务调度 在企业级应用中,经常会制定一些"计划任务",即在某个时间点做某件事情 核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作 任务调度涉及多线程并发.线程池维 ...
- topshelf和quartz内部分享
阅读目录: 介绍 基础用法 调试及安装 可选配置 多实例支持及相关资料 quartz.net 上月在公司内部的一次分享,现把PPT及部分交流内容整理成博客. 介绍 topshelf是创建windows ...
- Quartz.net持久化与集群部署开发详解
序言 我前边有几篇文章有介绍过quartz的基本使用语法与类库.但是他的执行计划都是被写在本地的xml文件中.无法做集群部署,我让它看起来脆弱不堪,那是我的罪过. 但是quart.net是经过许多大项 ...
- Quartz.net开源作业调度框架使用详解
前言 quartz.net作业调度框架是伟大组织OpenSymphony开发的quartz scheduler项目的.net延伸移植版本.支持 cron-like表达式,集群,数据库.功能性能强大更不 ...
- quartz.net 时间表达式----- Cron表达式详解
序言 Cron表达式:就是用简单的xxoo符号按照一定的规则,就能把各种时间维度表达的淋漓尽致,无所不在其中,然后在用来做任务调度(定时服务)的quart.net中所认知执行,可想而知这是多么的天衣无 ...
- Quartz.NET Windows 服务示例
想必大家在项目中处理简单的后台持续任务或者定时触发任务的时候均使用 Thread 或者 Task 来完成,但是项目中的这种需求一旦多了的话就得将任务调度引入进来了,那今天就简单的介绍一下 Quartz ...
- [Quartz笔记]玩转定时调度
简介 Quartz是什么? Quartz是一个特性丰富的.开源的作业调度框架.它可以集成到任何Java应用. 使用它,你可以非常轻松的实现定时任务的调度执行. Quartz的应用场景 场景1:提醒和告 ...
- 关于Quartz.NET作业调度框架的一点小小的封装,实现伪AOP写LOG功能
Quartz.NET是一个非常强大的作业调度框架,适用于各种定时执行的业务处理等,类似于WINDOWS自带的任务计划程序,其中运用Cron表达式来实现各种定时触发条件是我认为最为惊喜的地方. Quar ...
随机推荐
- rpm命令的使用
如果服务器配置了本地yum源,大部分的常用软件包都是有的.如果差了头文件或者什么so文件,可以按如下方式找:#以memory.h为例 [root@sz-cdn-centos7-1 tmp]# wher ...
- Go基础--goroutine和channel
goroutine 在go语言中,每一个并发的执行单元叫做一个goroutine 这里说到并发,所以先解释一下并发和并行的概念: 并发:逻辑上具备同时处理多个任务的能力 并行:物理上在同一时刻执行多个 ...
- 重拾Python(2):如何安装第三方库(Windows)
使用python进行数据分析或者数据处理时,往往需要使用一些库,而使用库之前必须安装它.Anaconda内置了很多常用的第三方库,可以满足绝大部分需求,比如numpy.pandas.matplotli ...
- 嵌套for in循环组合cat方式文件中包含空格问题
关于循环嵌套使用for循环的空格问题 原创不易,转载请注明 需求: 现有两个功文件,需要将文件拼接 [root@localhost ~]# cat name 111 222 223 333 444 5 ...
- JavaSE基础篇—流程控制语句
本章知识点分析: 流程控制语句 1.定义:流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块.流程控 制方式采用结构化程序设计中规定的三种基本流程机构:顺序结 ...
- 淘宝地址爬取及UI展示
淘宝地址爬取及UI展示 淘宝国家省市区街道获取 参考 foxiswho 的 taobao-area-php 部分代码,改由c#重构. 引用如下: Autofac MediatR Swagger Han ...
- [DeeplearningAI笔记]02_3.1-3.2超参数搜索技巧与对数标尺
Hyperparameter search 超参数搜索 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.1 调试处理 需要调节的参数 级别一:\(\alpha\)学习率是最重要的需要调节的 ...
- 深入理解JAVA虚拟机之JVM性能篇---垃圾回收
一.基本垃圾回收算法 1. 判断对象是否需要回收的方法(如何判断垃圾): 1) 引用计数(Reference Counting) 对象增加一个引用,即增加一个计数,删除一个引用则减少一个计数.垃圾回 ...
- Oracle Rac创建表空间及用户
1. 创建表空间: BEGIN DECLARE cnt integer := 0; BEGIN SELECT 1 INTO cnt FROM dual WHERE exists(SELECT * FR ...
- JavaBean,List,Map,json格式之间转化方式
public class TestBean { private String id; private String name; private String password; public Stri ...