1.初识Quartz
开发工具:STS
代码下载链接:https://github.com/theIndoorTrain/QuartzDemo.git
前言:
接触一个新事物的开始,我们都会产生一些疑问:
Quartz是什么?
Quartz是用来做什么的?
答:
Quartz是一个任务调度框架。说明白点,就是定制任务的。
例如:
每年你过生日时给你发一张生日贺卡;
每周一的6:00给你发一条起床提醒;
每月的15号给你发工资.......
明白了quartz的原理,我们就来进入我们的学习。
项目搭建
1.新建maven项目
2.导入quartz相关依赖
<!-- 添加quartz依赖 -->
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
任务一:
每隔五秒打印一句“Hello world!”;
1.新建一个Job类实现Job接口:
实现:打印系统时间,输出“Hello world!”
package com.xm.job; import java.text.SimpleDateFormat;
import java.util.Date; import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; public class HelloJob implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException {
Date date = new Date();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
System.out.println("Job start time: "+sf.format(date));
System.out.println("Hello world!");
} }
2.定义一个Scheduler类:
实现:
(1)定义一个JobDetail,绑定Job
(2)定义一个Trigger,定义任务细节
(3)定义一个Scheduler,绑定JobDetail和Trigger
package com.xm.scheduler; import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory; import com.xm.job.HelloJob; public class HelloScheduler { public static void main(String[] args) throws SchedulerException {
/**
* 1.定义一个JobDetail
*2.绑定 HelloJob
*3.定义id,group
*/
JobDetail jobDetail = JobBuilder
.newJob(HelloJob.class)
.withIdentity("job1", "group1")
.build(); /**
* 1.定义一个trigger
* 2.绑定group,name
* 3.指定开始、结束时间
* 4.定义任务细节
*/
Trigger trigger = TriggerBuilder
.newTrigger()
//绑定group,name
.withIdentity("trigger1", "group1")
//从现在开始执行
.startNow()
//指定开始执行时间
//.startAt()
//指定结束执行时间
//.endAt()
.withSchedule(
SimpleScheduleBuilder.simpleSchedule()
//执行间隔时间
.withIntervalInSeconds(5)
//重复执行
.repeatForever()
)
.build(); /**
* 1.定义一个SchedulerFactory工厂类
* 2.获得一个Scheduler类
* 3.启动Scheduler
* 4.绑定JobDetail和Trigger
*/
//定义一个SchedulerFactory工厂类
SchedulerFactory factory = new StdSchedulerFactory() ;
//获得一个Scheduler类
Scheduler scheduler = factory.getScheduler();
//启动Scheduler
scheduler.start();
//绑定JobDetail和Trigger
scheduler.scheduleJob(jobDetail, trigger); } }
3.运行结果:
4.代码下载链接:https://github.com/theIndoorTrain/QuartzDemo/tree/f00db42b1eee7043179d129a6be79d6ad2a0c99f
任务二:
每隔五秒打印一句“Hello world!”,5s后开始,30秒后结束
1.修改Scheduler:
package com.xm.scheduler; import java.text.SimpleDateFormat;
import java.util.Date; import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory; import com.xm.job.HelloJob; public class HelloScheduler { public static void main(String[] args) throws SchedulerException {
/**
* 1.定义一个JobDetail
*2.绑定 HelloJob
*3.定义id,group
*/
JobDetail jobDetail = JobBuilder
.newJob(HelloJob.class)
.withIdentity("job1", "group1")
.build(); /**
* 1.获取系统时间
* 2.定义开始时间
* 3.定义结束时间
*/
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
Date nowTime = new Date();
System.out.println("Now Time:"+sf.format(nowTime));
Date startTime = new Date(nowTime.getTime()+5000);
System.out.println("Start Time:"+sf.format(startTime));
Date endTime = new Date(nowTime.getTime()+30000);
System.out.println("End Time:"+sf.format(endTime)); /**
* 1.定义一个trigger
* 2.绑定group,name
* 3.指定开始、结束时间
* 4.定义任务细节
*/
Trigger trigger = TriggerBuilder
.newTrigger()
//绑定group,name
.withIdentity("trigger1", "group1")
//从现在开始执行
//.startNow()
//指定开始执行时间
.startAt(startTime)
//指定结束执行时间
.endAt(endTime)
.withSchedule(
SimpleScheduleBuilder.simpleSchedule()
//执行间隔时间
.withIntervalInSeconds(5)
//重复执行
.repeatForever()
)
.build(); /**
* 1.定义一个SchedulerFactory工厂类
* 2.获得一个Scheduler类
* 3.启动Scheduler
* 4.绑定JobDetail和Trigger
*/
//定义一个SchedulerFactory工厂类
SchedulerFactory factory = new StdSchedulerFactory() ;
//获得一个Scheduler类
Scheduler scheduler = factory.getScheduler();
//启动Scheduler
scheduler.start();
//绑定JobDetail和Trigger
scheduler.scheduleJob(jobDetail, trigger); } }
2.运行结果:
3.代码下载链接:https://github.com/theIndoorTrain/QuartzDemo/tree/95b0d2fff333ea1bfb1ce45fef86a8ef3f985133
2018-07-14
1.初识Quartz的更多相关文章
- 初识Quartz之第一个Quartz实例
转: 初识Quartz之第一个Quartz实例 2018年04月09日 17:07:31 carson0408 阅读数:366 版权声明:本文为博主原创文章,未经博主允许不得转载. https:/ ...
- 初识quartz 并分析 项目中spring整合quartz的配置【原创+转载】
初识quartz 并分析 项目中spring整合quartz的配置[原创+转载]2018年01月29日 12:08:07 守望dfdfdf 阅读数:114 标签: quartz 更多个人分类: 工具 ...
- 初识Quartz(入门案例)+常用的Cron表达式
1.Quartz架构图 1.实体层 package cn.happy.entity; //1. public class Plan { //时间 private String date; //任务 p ...
- 初识Quartz (一)
首先大概的了解一下Quartz. 一:首先进入官网去看看什么是quartz.http://www.quartz-scheduler.org/ Quartz是一个功能丰富的开源作业调度库,可以集成到几乎 ...
- 初识Quartz(二)
简单作业: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 package quartz_pr ...
- 初识Quartz(三)
本文将介绍CronTrigger的使用方法,CronTrigger相比 SimpleTrigger可以支持更复杂的作业计划.cron这一观念来自UNIX,在UNIX中,cron是一个运行于后台的守护程 ...
- 初识Quartz(一)
首先需要一个任务: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 package quartz_proj ...
- Quartz使用(1) - 初识quartz
1. 背景 由于最新的工作项目中,需要使用quartz框架,以完成相关的任务的定时执行.经过两周的调研与使用,本系列博客会参考官网及网上相关博客,结合工作项目中的使用,详细介绍quartz的各个方面. ...
- Quartz使用(2) - Quartz核心接口Scheduler、Job
quartz的核心接口如下: 接口 含义 Scheduler scheduler的主要API接口 Job 任务实现接口,期望调度器能够执行 JobDetail 用于定义Job实例 Trigger 调度 ...
随机推荐
- 关于JAVA的基本知识
TCP/IP 协议族常用协议 应用层:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等 传输层:TCP,UDP 网络层:IP,ICMP,OSPF,EIGRP,IGMP 数据链 ...
- Deep Learning 和 Knowledge Graph howto
领军大家: Geoffrey E. Hinton http://www.cs.toronto.edu/~hinton/ 阅读列表: reading lists and survey papers fo ...
- C# 反射 Type.GetFields 方法
using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Reflecti ...
- Linux下判断磁盘是SSD还是HDD的几种方法
环境介绍 Fedora release 25 (Twenty Five) 判断方法 方法一 判断cat /sys/block/*/queue/rotational的返回值(其中*为你的硬盘设备名称,例 ...
- Unity C# 用枚举(enum)制作复选框
最近在项目中做测试脚本用到一些布尔值做方法的开关,突然想到可以制作一个复选框控制开关. 首先搜集网上的资料,基本大同小异,这里就不多做解释了,代码附上: public class EnumFlagsA ...
- webConfig中<customErrors>节点配置
发布在远程计算机上的网站调试问题: 通常情况下我们会设置错误页,不让用户看到错误信息 这种WebConfig的配置方法是: <configuration> <system.web&g ...
- Version Control&Git
首先了解一下什么是版本控制: Version control (版本控制)是指对软件开发过程中各种程序代码.配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一. 其次版本控制最主要的功能 ...
- nopcommerce3.6中文包
nopCommerce 语言包,xml文件 点击下载:3.60_language_pack_zh.rar (60.82 kb) 下载后解压通过后台导入即可使用.如何导入?点击这里
- Redis入门--(二)Redis的安装
1.建议安装在Linux服务器上来运行测试的
- Redis数据类型之散列类型hash
在redis中用的最多的就是hash和string类型. 问题 假设有User对象以JSON序列化的形式存储到redis中, User对象有id.username.password.age.name等 ...