Quartz-第四篇 常规quartz的使用
1、目录结构

2、主要文件
1》引入的jar包,quartz-2.2.2解压后lib下所有的jar包
2》quartz.properties
org.quartz.threadPool.threadCount: 2
org.quartz.jobStore.misfireThreshold: 4000
3》SchedulerUtil.java
package com.lfy.scheduler; import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler; public class SchedulerUtil { private static Scheduler scheduler; private static CronTrigger cronTrigger; private static JobDetail jobDetail; public static Scheduler getScheduler() {
return scheduler;
} public static void setScheduler(Scheduler scheduler) {
SchedulerUtil.scheduler = scheduler;
} public static CronTrigger getCronTrigger() {
return cronTrigger;
} public static void setCronTrigger(CronTrigger cronTrigger) {
SchedulerUtil.cronTrigger = cronTrigger;
} public static JobDetail getJobDetail() {
return jobDetail;
} public static void setJobDetail(JobDetail jobDetail) {
SchedulerUtil.jobDetail = jobDetail;
}
}
4》HelloJob.java
package com.lfy.jobdetail; 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 { @Override
public void execute(JobExecutionContext arg0) throws JobExecutionException { Date date = new Date();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("现在的时间是:"+ sf.format(date));
//具体的业务逻辑
System.out.println("Hello Quartz");
}
}
5》CronTriggerScheduleApp.java
package com.lfy.controller; import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.SchedulerException;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import com.lfy.jobdetail.HelloJob;
import com.lfy.scheduler.SchedulerUtil; @Controller
@RequestMapping("/App")
public class CronTriggerScheduleApp { @RequestMapping(value="/startQuartz")
public String startQuartz() throws SchedulerException { SchedulerUtil.setScheduler(new StdSchedulerFactory().getScheduler()); SchedulerUtil.setJobDetail(JobBuilder.newJob(HelloJob.class)
.withIdentity("cronJob","group1")
.build()); CronScheduleBuilder cronScheduleBuilder=CronScheduleBuilder.cronSchedule("/6 * * * * ? *");
cronScheduleBuilder.withMisfireHandlingInstructionDoNothing();
SchedulerUtil.setCronTrigger(TriggerBuilder.newTrigger()
.withIdentity("cronTrigger")
.withSchedule(cronScheduleBuilder)
.build());
SchedulerUtil.getScheduler().start();
SchedulerUtil.getScheduler().scheduleJob(SchedulerUtil.getJobDetail(),
SchedulerUtil.getCronTrigger());
return "index";
}
}
6》PauseController.java
package com.lfy.controller; import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import com.lfy.scheduler.SchedulerUtil; @Controller
@RequestMapping("/PauseController")
public class PauseController { @RequestMapping(value="/pause")
public void pauseCronTrigger() { JobKey jobkey=JobKey.jobKey("cronJob","group1");
Scheduler scheduler=SchedulerUtil.getScheduler();
try {
scheduler.pauseJob(jobkey);
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}
7》ResumeController.java
package com.lfy.controller; import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import com.lfy.scheduler.SchedulerUtil; @Controller
@RequestMapping("/ResumeController")
public class ResumeController { @RequestMapping(value="/resume")
public void resumeCronTrigger() { JobKey jobkey=JobKey.jobKey("cronJob","group1");
Scheduler scheduler=SchedulerUtil.getScheduler();
try {
scheduler.resumeJob(jobkey);
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}
8》AlterTriggerTimeController.java
package com.lfy.controller; import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.Scheduler;
import org.quartz.TriggerKey;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import com.lfy.scheduler.SchedulerUtil; @Controller
@RequestMapping("/RescheduleController")
public class AlterTriggerTimeController { @RequestMapping(value="/reschedule")
public void rescheduleCronTrigger() { String newCron="/3 * * * * ? *";
TriggerKey triggerKey = TriggerKey.triggerKey("cronJob","group1"); try {
Scheduler sched = SchedulerUtil.getScheduler();
CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerKey);
if (trigger == null) {
return;
}
String oldTime = trigger.getCronExpression();
if (!oldTime.equalsIgnoreCase(newCron)) {
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(newCron);
// 按新的cronExpression表达式重新构建trigger
trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
// 按新的trigger重新设置job执行
sched.rescheduleJob(triggerKey, trigger);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
9》DeleteController.java
package com.lfy.controller; import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.TriggerKey;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import com.lfy.scheduler.SchedulerUtil; @Controller
@RequestMapping("/DeleteController")
public class DeleteController { @RequestMapping(value="/delete")
public void deleteCronTrigger() { TriggerKey triggerKey = TriggerKey.triggerKey("cronJob","group1");
JobKey jobKey = JobKey.jobKey("cronJob","group1");
try {
Scheduler sched = SchedulerUtil.getScheduler();
sched.pauseTrigger(triggerKey);// 停止触发器
sched.unscheduleJob(triggerKey);// 移除触发器
sched.deleteJob(jobKey);// 删除任务
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
Quartz-第四篇 常规quartz的使用的更多相关文章
- Quartz教程四:Trigger
原文链接 | 译文链接 | 翻译:nkcoder 本系列教程由quartz-2.2.x官方文档翻译.整理而来,希望给同样对quartz感兴趣的朋友一些参考和帮助,有任何不当或错误之处,欢迎指正:有兴趣 ...
- Spring+Quartz 整合一:常规整合
步骤一: 定时任务需要一个配置文件(spring-mvc-timeTask.xml 随便起名),将其在web.xml中加载 <context-param> <param-name&g ...
- 四)Spring + Quartz
使用Quartz默认配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...
- Quartz-第一篇 认识Quartz
1.什么是Quartz Quartz是一个任务调度框架,借助Cron表达式,Quartz可以支持各种复杂的任务调度.JDK中也提供了简单的任务调度,java.util.Timer. Quartz的三大 ...
- Quartz.Net系列(十五):Quartz.Net四种修改配置的方式
案例:修改默认线程个数 1.NameValueCollection System.Collections.Specialized.NameValueCollection collection = ne ...
- quartz详解3:quartz数据库集群-锁机制
http://blog.itpub.NET/11627468/viewspace-1764753/ 一.quartz数据库锁 其中,QRTZ_LOCKS就是Quartz集群实现同步机制的行锁表,其表结 ...
- 解剖SQLSERVER 第十四篇 Vardecimals 存储格式揭秘(译)
解剖SQLSERVER 第十四篇 Vardecimals 存储格式揭秘(译) http://improve.dk/how-are-vardecimals-stored/ 在这篇文章,我将深入研究 ...
- 第四篇 Replication:事务复制-订阅服务器
本篇文章是SQL Server Replication系列的第四篇,详细内容请参考原文. 订阅服务器就是复制发布项目的所有变更将传送到的服务器.每一个发布需要至少一个订阅,但是一个发布可以有多个订阅. ...
- 第四篇 Integration Services:增量加载-Updating Rows
本篇文章是Integration Services系列的第四篇,详细内容请参考原文. 回顾增量加载记住,在SSIS增量加载有三个使用案例:1.New rows-add rows to the dest ...
随机推荐
- ESP8266内置的定时器库--Ticker库
Ticker的功能非常简单,就是规定时间后调用函数 总体上,根据功能可以把方法分为两大类: 定时器管理方法: 定时器启用方法: detach() 停止定时器 active() 定时器是否 ...
- Java基础——面试、笔试
网址来源: http://www.nowcoder.com/discuss/5949?type=0&order=0&pos=4&page=2 参考资料:(java方面的一些面试 ...
- 两个惊艳的python库:tqdm和retry
转载到请包括本文地址:http://spaces.ac.cn/archives/3902/ Python基本是我目前工作.计算.数据挖掘的唯一编程语言(除了符号计算用Mathematica外).当然, ...
- Python学习:Python设计模式-单例模式
一.单例模式存在的意义 在这里的单例就是只有一个实例(这里的实例就像在面向对象的时候,创建了一个对象也可以说创建了一个实例),只用一个实例进行程序设计,首先我们可以了解一下什么时候不适合使用单例模式, ...
- BZOJ 4883: [Lydsy1705月赛]棋盘上的守卫 最小生成树 + 建模
Description 在一个n*m的棋盘上要放置若干个守卫.对于n行来说,每行必须恰好放置一个横向守卫:同理对于m列来说,每列 必须恰好放置一个纵向守卫.每个位置放置守卫的代价是不一样的,且每个位置 ...
- python学习之路(22)
使用模块 Python本身就内置了很多非常有用的模块,只要安装完毕,这些模块就可以立刻使用. 我们以内建的sys模块为例,编写一个hello的模块: #!/usr/bin/env python # - ...
- android intent调用系统camera
利用android的camera通常有两种方式:利用intent调用系统的camera,或者结合surfaceview实现自己定制的camera.先分别对这两种方法说明如下: 一.使用系统自配的cam ...
- Comparable接口与Comparator接口的比较————Comparator接口详解
Comparator接口位于:java.util包中. Comparator接口:1. 强行对某个对象的Collection进行整体排序.值得注意的是:Comparator接口可以作为参数传到一些so ...
- 步步向前之Element-UI
Table 固定表头 只要在el-table元素中定义了height属性,即可实现固定表头的表格,而不需要额外的代码.例如: <el-table :data="tableData3&q ...
- jQuery-validate插件初级篇
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...