特点:分布式+集群
设计模式:
  工厂模式
  builder模式
  组件模式
  链式写法
核心概念:调度器,任务,触发器
 
使用:
  依赖:
  

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

创建一个实例实现Job接口,实现其中的execute方法,将你要做的任务放到此方法

package quartz.job;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; import javax.xml.crypto.Data;
import java.text.SimpleDateFormat;
import java.util.Date; /**
* ClassName: HelloJob<br/>
* Description: <br/>
* date: 2019/1/22 11:19 AM<br/>
*
* @author chengluchao
* @since JDK 1.8
*/ public class HelloJob implements Job { @Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("Current Exec Time Is:" + simpleDateFormat.format(date));
System.out.println("Hello word!");
}
}

编写调用类

package quartz.job;

import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory; /**
* ClassName: HelloScheduler<br/>
* Description: <br/>
* date: 2019/1/22 11:23 AM<br/>
*
* @author chengluchao
* @since JDK 1.8
*/ public class HelloScheduler {
public static void main(String[] args) throws Exception {
//创建一个JobDetail实例,将HelloJob.class绑定
JobDetail jobDetail = JobBuilder
.newJob(HelloJob.class)
.withIdentity("myJob", "group1")
.build();
//创建一个Trigger实例,定义该job立即执行,并且每隔两秒钟重复执行一次,直到永远
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("myTrigger", "group1")
.startNow()//立即执行
.withSchedule(
SimpleScheduleBuilder
.simpleSchedule()
.withIntervalInSeconds(2)//两秒一次
.repeatForever())//直到永远
.build();
//创建Schduler实例
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger);
}
}

14:56:17.296 [DefaultQuartzScheduler_QuartzSchedulerThread] DEBUG org.quartz.simpl.PropertySettingJobFactory - Producing instance of Job 'group1.myJob', class="quartz".job.HelloJob
14:56:17.296 [DefaultQuartzScheduler_QuartzSchedulerThread] DEBUG org.quartz.core.QuartzSchedulerThread - batch acquisition of 1 triggers
14:56:17.296 [DefaultQuartzScheduler_Worker-10] DEBUG org.quartz.core.JobRunShell - Calling execute on job group1.myJob
Current Exec Time Is:2019-01-22 14:56:17
Hello word!
14:56:19.295 [DefaultQuartzScheduler_QuartzSchedulerThread] DEBUG org.quartz.simpl.PropertySettingJobFactory - Producing instance of Job 'group1.myJob', class="quartz".job.HelloJob
14:56:19.295 [DefaultQuartzScheduler_QuartzSchedulerThread] DEBUG org.quartz.core.QuartzSchedulerThread - batch acquisition of 1 triggers
14:56:19.295 [DefaultQuartzScheduler_Worker-1] DEBUG org.quartz.core.JobRunShell - Calling execute on job group1.myJob
Current Exec Time Is:2019-01-22 14:56:19
Hello word!
14:56:21.296 [DefaultQuartzScheduler_QuartzSchedulerThread] DEBUG org.quartz.simpl.PropertySettingJobFactory - Producing instance of Job 'group1.myJob', class="quartz".job.HelloJob
14:56:21.296 [DefaultQuartzScheduler_QuartzSchedulerThread] DEBUG org.quartz.core.QuartzSchedulerThread - batch acquisition of 1 triggers
14:56:21.296 [DefaultQuartzScheduler_Worker-2] DEBUG org.quartz.core.JobRunShell - Calling execute on job group1.myJob
Current Exec Time Is:2019-01-22 14:56:21
Hello word!

补充:

jobDetail的重要属性:
  name
  group 默认"DEFAULT"
  jobClass
  jobDataMap:
      在任务调度的时候,jobDataMap可以进行存储一些信息;
 
打印jobDetail的信息
        System.out.println("jobDetail's name : " + jobDetail.getKey().getName());
System.out.println("jobDetail's gruop : " + jobDetail.getKey().getGroup());
System.out.println("jobDetail's jobClass : " + jobDetail.getKey().getClass());

jobDataMap的使用:

public class HelloScheduler {
public static void main(String[] args) throws Exception {
//创建一个JobDetail实例,将HelloJob.class绑定
JobDetail jobDetail = JobBuilder
.newJob(HelloJob.class)
.withIdentity("myJob")
.usingJobData("message","hello myJob1")
.usingJobData("floatJobvalue",3.14f)
.build(); //创建一个Trigger实例,定义该job立即执行,并且每隔两秒钟重复执行一次,直到永远
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("myTrigger", "group1")
.usingJobData("message","hello myTrigger1")
.usingJobData("doubleJobvalue",885.02)
.startNow()//立即执行
.withSchedule(
SimpleScheduleBuilder
.simpleSchedule()
.withIntervalInSeconds(2)//两秒一次
.repeatForever())//直到永远
.build();
//创建Schduler实例
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger);
}
}
public class HelloJob implements Job {

    @Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("Current Exec Time Is:" + simpleDateFormat.format(date));
System.out.println("Hello word!"); JobKey key = jobExecutionContext.getJobDetail().getKey();
System.out.println("JobDetailKey : " + key.getName() + "JobDetailValue : " + key.getGroup());
TriggerKey triggerKey1 = jobExecutionContext.getTrigger().getKey();
System.out.println("triggerKey1 : " + triggerKey1.getName() + "triggervalue1 : " + triggerKey1.getGroup()); JobDataMap dataMap = jobExecutionContext.getJobDetail().getJobDataMap();
JobDataMap tdataMap = jobExecutionContext.getTrigger().getJobDataMap(); System.out.println(dataMap.get("message"));
System.out.println(tdataMap.get("message")); JobDataMap dataMap2 = jobExecutionContext.getMergedJobDataMap();
//Trigger会覆盖JobDetail的信息
System.out.println(dataMap2.get("message"));
System.out.println(dataMap2.get("message")); }

获取jobDataMap的值的方式2:

在HelloJob类中定义属性,属性名和map中的key一样,加上get/set方法

在HelloJob的类中就可以直接使用

Trigger的方法:
.startAt(date)//首次执行的时间
.endAt(endDate)//最后一次执行的时间
.startNow()//立即执行

Quartz -第一篇-入门的更多相关文章

  1. 第一篇 入门必备 (Android学习笔记)

    第一篇 入门必备 第1章 初识Android 第2章 搭建你的开发环境 第3章 创建第一个程序--HelloWorld 第4章 使用Android工具   ●Android之父 Android安迪·罗 ...

  2. 学会Git玩转GitHub(第一篇) 入门详解 - 精简归纳

    学会Git玩转GitHub(第一篇) 入门详解 - 精简归纳 JERRY_Z. ~ 2020 / 9 / 25 转载请注明出处!️ 目录 学会Git玩转GitHub(第一篇) 入门详解 - 精简归纳 ...

  3. svn第一篇----入门指南

    摘要:trunk存放的是主代码,不修改,branch,tag,milestone均是从trunk中衍生的.branch复制trunk中代码用于开发,tag用于存放比较重要的发行版,存放release版 ...

  4. curl讲解第一篇---入门和基本使用

    概念 它支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP. curl同样支持HTTPS认证,HTTP POST方法, ...

  5. elasticsearch 第一篇(入门篇)

    介绍 elasticsearch是一个高效的.可扩展的全文搜索引擎 基本概念 Near Realtime(NRT): es是一个接近实时查询平台,意味从存储一条数据到可以索引到数据时差很小,通常在1s ...

  6. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  7. 【OpenCV入门指南】第一篇 安装OpenCV

    http://blog.csdn.net/morewindows/article/details/8225783/ win10下vs2015配置Opencv3.1.0过程详解(转) http://ww ...

  8. .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划

    作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9977862.html 写在前面 千呼万唤始出来,首先,请允许我长吸一口气!真没想到一份来自28岁老程序员 ...

  9. net core体系-web应用程序-4asp.net core2.0 项目实战(CMS)-第一章 入门篇-开篇及总体规划

    .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划   原文地址:https://www.cnblogs.com/yilezhu/p/9977862.html 写在前面 千呼万唤始出来 ...

随机推荐

  1. 刷题总结——小z的袜子(bzoj2038)

    题目: Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把 ...

  2. 洛谷 [P3812] 线性基

    异或空间下的线性基模版 异或空间下求线性基,本质还是高斯消元,参见 http://www.cnblogs.com/Mr-WolframsMgcBox/p/8562924.html 求最大值是一个贪心的 ...

  3. 云计算与 OpenStack

    “云计算” 算是近年来最热的词了.现在 IT 行业见面不说这三个字您都不好意思跟人家打招呼. 对于云计算,学术界有各种定义,大家有兴趣可以百度一下. CloudMan 这里主要想从技术的角度谈谈对云计 ...

  4. iOS7 毛玻璃效果

    转自:http://prolove10.blog.163.com/blog/static/138411843201391401054305/ 原图:  效果图:  实现:首先需要导入Accelerat ...

  5. Android Service服务-(转)

    Service是Android系统中提供的四大组件之一.它是运行在后台的一种服务,一般声明周期较长,不直接与用户进行交互.   服务不能自己运行,需要通过调用Context.startService( ...

  6. fmt 包中的函数和方法

    / Fprintf 将参数列表 a 填写到格式字符串 format 的占位符中// 并将填写后的结果写入 w 中,返回写入的字节数func Fprintf(w io.Writer, format st ...

  7. 深入V8引擎-Time核心方法之mac篇

    由于底层逻辑实现不同操作系统区别很大,所以干脆分篇来说. 主要讲一下Time.TimeTicks两个类里面对于时间戳的实现,其余的运算符重载.边缘工具方法就不看了,先是Time. Time 类本身的说 ...

  8. vue之列表渲染

    一.v-for循环用于数组 v-for 指令根据一组数组的选项列表进行渲染. 1.v-for 指令需要使用 item in items 形式的特殊语法,items 是源数据数组名, item 是数组元 ...

  9. 关于css虚线

    今天遇到几个虚线效果,不能一下子反应过来具体属性. 一.dashed和dotted的区别 首先是dashed和dotted都是指“虚线”,但是两者显示的效果不尽相同. 从字面意思来看, dashed: ...

  10. codevs——1065 01字符串

    1065 01字符串  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 输出仅有0和1组成的长度为n的字符串, ...