开源框架Quartz动态加入、改动和删除定时任务 (二)
貌似每次回过头去看之前写的一些东西,总感觉不是非常完美~~虽说不做完美人。但也要做完美事!这次主要是针对Quartz的动态维护和Spring集成。简单粗暴一点,直接上代码,有什么不了解留言交流
先来一个定时任务相关准备工作
package com.hupu.timertask; /**
* 任务调度类
* @author Joyce.Luo
* @date 2015-3-31 下午03:32:04
* @version V3.0
* @since Tomcat6.0,Jdk1.6
* @copyright Copyright (c) 2015
*/
public class QuartzJob {
/**
* 任务ID
*/
private Integer jobId; /**
* 任务名称
*/
private String jobName; /**
* 任务分组
*/
private String jobGroup; /**
* 任务状态 0禁用 1启用 2删除
*/
private Integer jobStatus; /**
* 任务执行时间表达式
*/
private String cronExpression; /**
* @return the jobId
*/
public Integer getJobId() {
return jobId;
} /**
* @param jobId
* the jobId to set
*/
public void setJobId(Integer jobId) {
this.jobId = jobId;
} /**
* @return the jobName
*/
public String getJobName() {
return jobName;
} /**
* @param jobName
* the jobName to set
*/
public void setJobName(String jobName) {
this.jobName = jobName;
} /**
* @return the jobGroup
*/
public String getJobGroup() {
return jobGroup;
} /**
* @param jobGroup
* the jobGroup to set
*/
public void setJobGroup(String jobGroup) {
this.jobGroup = jobGroup;
} /**
* @return the jobStatus
*/
public Integer getJobStatus() {
return jobStatus;
} /**
* @param jobStatus
* the jobStatus to set
*/
public void setJobStatus(Integer jobStatus) {
this.jobStatus = jobStatus;
} /**
* @return the cronExpression
*/
public String getCronExpression() {
return cronExpression;
} /**
* @param cronExpression
* the cronExpression to set
*/
public void setCronExpression(String cronExpression) {
this.cronExpression = cronExpression;
}
}
定时任务
package com.hupu.timertask; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.quartz.impl.StdScheduler; /**
* 任务调度管理类
* @author Joyce.Luo
* @date 2015-3-31 下午03:42:30
* @version V3.0
* @since Tomcat6.0,Jdk1.6
* @copyright Copyright (c) 2015
*/
public class QuartzManager {
private static final Logger logger = LogManager.getLogger(QuartzManager.class.getName());
private StdScheduler scheduler; /**
* @param scheduler the scheduler to set
*/
public void setScheduler(StdScheduler scheduler) {
this.scheduler = scheduler;
} /**
* 初始化任务调度
* @author Joyce.Luo
* @date 2015-3-31 下午03:48:55
* @version V3.0
* @since Tomcat6.0,Jdk1.6
* @copyright Copyright (c) 2015
*/
@SuppressWarnings("unchecked")
public void initJob(QuartzJob job, Class cls){
logger.info("初始化任务调度");
try {
TriggerKey triggerKey = TriggerKey.triggerKey(job.getJobName(), job.getJobGroup());
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
if (null == trigger) {
addQuartzJob(job, trigger, cls);
}
} catch (Exception e) {
logger.error("初始化任务调度异常!" + e.getMessage(), e);
}
} /**
* 向任务调度中加入定时任务
* @param job 定时任务信息
* @param trigger 定时调度触发器
* @author Joyce.Luo
* @date 2015-3-31 下午04:04:58
* @version V3.0
* @since Tomcat6.0,Jdk1.6
* @copyright Copyright (c) 2015
*/
@SuppressWarnings("unchecked")
private void addQuartzJob(QuartzJob job, CronTrigger trigger, Class cls){
logger.info("向任务调度中加入定时任务");
try {
JobDetail jobDetail = JobBuilder.newJob(cls)
.withIdentity(job.getJobName(), job.getJobGroup()).build();
jobDetail.getJobDataMap().put(job.getJobName(), job);
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression());
trigger = TriggerBuilder.newTrigger().withIdentity(job.getJobName(), job.getJobGroup())
.withSchedule(scheduleBuilder).build();
scheduler.scheduleJob(jobDetail, trigger);
} catch (Exception e) {
logger.error("向任务调度中加入定时任务异常。" + e.getMessage(), e);
}
} /**
* 马上执行定时任务
* @param job 定时任务信息
* @author Joyce.Luo
* @date 2015-4-20 下午02:08:41
* @version V3.0
* @since Tomcat6.0,Jdk1.6
* @copyright Copyright (c) 2015
*/
void runJob(QuartzJob job){
logger.info("马上执行任务调度中的定时任务");
try {
if (null == job) {
logger.info("定时任务信息为空,无法马上执行");
return;
}
JobKey jobKey = JobKey.jobKey(job.getJobName(), job.getJobGroup());
if(null == jobKey){
logger.info("任务调度中不存在[" + job.getJobName() + "]定时任务。不予马上执行! ");
return;
}
scheduler.triggerJob(jobKey);
} catch (Exception e) {
logger.error("马上执行任务调度中的定时任务异常。" + e.getMessage(), e);
}
} /**
* 改动任务调度中的定时任务
* @param job 定时任务信息
* @param triggerKey 定时调度触发键
* @param trigger 定时调度触发器
* @author Joyce.Luo
* @date 2015-3-31 下午04:16:54
* @version V3.0
* @since Tomcat6.0,Jdk1.6
* @copyright Copyright (c) 2015
*/
void updateQuartzJob(QuartzJob job, TriggerKey triggerKey, CronTrigger trigger){
logger.info("改动任务调度中的定时任务");
try {
if (null == job || null == triggerKey || null == trigger) {
logger.info("改动调度任务參数不正常! ");
return;
}
logger.info("原始任务表达式:" + trigger.getCronExpression()
+ ",如今任务表达式:" + job.getCronExpression());
if (trigger.getCronExpression().equals(job.getCronExpression())) {
logger.info("任务调度表达式一致,不予进行改动!");
return;
}
logger.info("任务调度表达式不一致。进行改动");
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression());
trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
scheduler.rescheduleJob(triggerKey, trigger);
} catch (Exception e) {
logger.error("改动任务调度中的定时任务异常!" + e.getMessage(), e);
}
} /**
* 暂停任务调度中的定时任务
* @param job 定时任务信息
* @author Joyce.Luo
* @date 2015-4-20 下午02:22:53
* @version V3.0
* @since Tomcat6.0,Jdk1.6
* @copyright Copyright (c) 2015
*/
void pauseJob(QuartzJob job){
logger.info("暂停任务调度中的定时任务");
try {
if (null == job) {
logger.info("暂停调度任务參数不正常!");
return;
}
JobKey jobKey = JobKey.jobKey(job.getJobName(), job.getJobGroup());
if(null == jobKey){
logger.info("任务调度中不存在[" + job.getJobName() + "]定时任务,不予进行暂停。");
return;
}
scheduler.pauseJob(jobKey);
} catch (Exception e) {
logger.error("暂停任务调度中的定时任务异常。" + e.getMessage(), e);
}
} /**
* 恢复任务调度中的定时任务
* @param job 定时任务信息
* @author Joyce.Luo
* @date 2015-4-20 下午02:26:08
* @version V3.0
* @since Tomcat6.0,Jdk1.6
* @copyright Copyright (c) 2015
*/
void resumeJob(QuartzJob job){
logger.info("恢复任务调度中的定时任务");
try {
if (null == job) {
logger.info("恢复调度任务參数不正常!");
return;
}
JobKey jobKey = JobKey.jobKey(job.getJobName(), job.getJobGroup());
if(null == jobKey){
logger.info("任务调度中不存在[" + job.getJobName() + "]定时任务。不予进行恢复!");
return;
}
scheduler.resumeJob(jobKey);
} catch (Exception e) {
logger.error("恢复任务调度中的定时任务异常! " + e.getMessage(), e);
}
} /**
* 删除任务调度中的定时任务
* @param job 定时任务信息
* @author Joyce.Luo
* @date 2015-3-31 下午04:30:03
* @version V3.0
* @since Tomcat6.0,Jdk1.6
* @copyright Copyright (c) 2015
*/
void deleteJob(QuartzJob job){
logger.info("删除任务调度中的定时任务");
try {
if (null == job) {
logger.info("删除调度任务參数不正常!");
return;
}
JobKey jobKey = JobKey.jobKey(job.getJobName(), job.getJobGroup());
if(null == jobKey){
logger.info("任务调度中不存在[" + job.getJobName() + "]定时任务,不予进行删除!");
return;
}
scheduler.deleteJob(jobKey);
} catch (Exception e) {
logger.error("删除任务调度中的定时任务异常! " + e.getMessage(), e);
}
} /**
* 删除任务调度定时器
* @param triggerKey
* @author Joyce.Luo
* @date 2015-3-31 下午04:35:33
* @version V3.0
* @since Tomcat6.0,Jdk1.6
* @copyright Copyright (c) 2015
*/
void deleteJob(TriggerKey triggerKey){
logger.info("删除任务调度定时器");
try {
if(null == triggerKey){
logger.info("停止任务定时器參数不正常,不予进行停止! ");
return;
}
logger.info("停止任务定时器");
scheduler.pauseTrigger(triggerKey);
scheduler.unscheduleJob(triggerKey);
} catch (Exception e) {
logger.info("删除任务调度定时器异常。" + e.getMessage() ,e);
}
}
}
任务调度工厂
package com.hupu.timertask; import java.util.Date; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; import com.hupu.util.FormatUtil; /**
* 任务调度工厂类
* @author Joyce.Luo
* @date 2015-3-31 下午03:38:35
* @version V3.0
* @since Tomcat6.0,Jdk1.6
* @copyright Copyright (c) 2015
*/
public class QuartzJobFactory implements Job {
private static final Logger logger = LogManager.getLogger(QuartzJobFactory.class.getName()); @Override
public void execute(JobExecutionContext context) throws JobExecutionException {
QuartzJob scheduleJob = (QuartzJob)context.getMergedJobDataMap().get("backup_job");
logger.info("定时任务開始执行,任务名称[" + scheduleJob.getJobName() + "]");
Date previousFireTime = context.getPreviousFireTime();
if(null != previousFireTime){
logger.info("定时任务上次调度时间:" + FormatUtil.formatDate(previousFireTime));
}
logger.info("定时任务下次调度时间:" + FormatUtil.formatDate(context.getNextFireTime()));
// 执行业务逻辑
}
}
到这里代码基本结束,至于Spring的配置,这个就不用多讲了哈~~~
得嘞。简单的说到这里吧
开源框架Quartz动态加入、改动和删除定时任务 (二)的更多相关文章
- 任务调度开源框架Quartz动态加入、改动和删除定时任务
Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.Quartz框架包括了调度器监听.作业和触发器监听.你能够配置作业和触发器监听为全局监听或者是特定于 ...
- 任务调度开源框架Quartz动态添加、修改和删除定时任务
Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.Quartz框架包含了调度器监听.作业和触发器监听.你可以配置作业和触发器监听为全局监听或者是特定于 ...
- 任务调度开源框架Quartz概述
任务调度开源框架Quartz 几乎每个项目中都用到了自动任务处理功能.所以在任务调度的功能很常用,但是一个好的任务调度程序是一个颇具挑战性的工作.最近用到Quartz这个框架,感觉很好,所以进行学习. ...
- Android的SwipeToDismiss第三方开源框架模拟QQ对话列表侧滑删除,置顶,将头像图片圆形化处理。
<Android SwipeToDismiss:左右滑动删除ListView条目Item> Android的SwipeToDismiss是github上一个第三方开源框架(github ...
- Java任务调度开源框架quartz学习
一.quartz学习 Java框架介绍:Quartz从入门到进阶 http://edu.yesky.com/edupxpt/233/2209233.shtml 1.例子:http://javacraz ...
- Quartz动态添加、修改和删除定时任务
任务调度开源框架Quartz动态添加.修改和删除定时任务 Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.Quartz框架包含了调度器监听.作业和触 ...
- Quartz动态添加,修改,删除任务(暂停,任务状态,恢复,最近触发时间)
首页 博客 学院 下载 图文课 论坛 APP 问答 商城 VIP会员 活动 招聘 ITeye GitChat 写博客 小程序 消息 登录注册 关闭 quartz_Cron表达式一分钟教程 09-05 ...
- Quartz小记(一):Elastic-Job - 分布式定时任务框架
Elastic-Job是ddframe中dd-job的作业模块中分离出来的分布式弹性作业框架.去掉了和dd-job中的监控和ddframe接入规范部分.该项目基于成熟的开源产品Quartz和Zooke ...
- .NET开源作业调度框架(Quartz.NET和FluentScheduler)实战项目演练
一.课程介绍 明人不说暗话,跟着阿笨一起玩NET .本次分享课程属于<C#高级编程实战技能开发宝典课程系列>中的一部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享 ...
随机推荐
- springcloud+eureka简单入门案例
springcloud+eureka简单入门案例 一.服务提供者 直接提供服务,入门案例没有特别要设置的地方,注意下端口,由于要启动多个服务,可能会冲突 配置文件(src/main/resources ...
- intValue()的用法
今天看到了Integer的这个方法,有点疑惑,查了下,做下笔记; 1.intValue()是java.lang.Number类的方法,Number是一个抽象类.Java中所有的数值类都继承它.也就是说 ...
- 【 Linux 】Linux套接字简要说明
Linux套接字 源IP地址和目的IP地址以及源端口和目标端口号的组合称为套接字.其作用于标识客户端请求的服务器和服务. 套接字,支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间 ...
- 手机端 输入法出现 input框不在屏幕中间位置的问题
/** * 修改点击input输入框时的位置 */ $('.input-footer-none').on('focus',function(){ var _this=this; setTimeout( ...
- C#实例:Unity依赖注入使用
http://jingyan.baidu.com/article/c74d6000840b260f6b595d78.html
- KDJ回测
# -*- coding: utf-8 -*- import os import pandas as pd # ========== 遍历数据文件夹中所有股票文件的文件名,得到股票代码列表stock_ ...
- [转]CreateDIBitmap与CreateDIBSection
首先明确最主要区别:CreateDIBitmap创建的是设备相关位图句柄 - HBITMAP. CreateDIBSection创建的是设备 ...
- 第一步:Java开发环境的配置
一.下载JDK 下载地址:www.oracle.com.如下图: 二.配置JDK 安装JDK一直点击下一步就可以,默认是安装在C盘里.如下图: 然后配置系统路径(主要目的是方便开发),参考地址:jin ...
- sonarQube6.1 升级至6.2
在使用sonarQube6.1一段时间后,今天才发现sonarQube6.2已经更新,为了尝鲜,我决定在本机先尝试一下,如何升级至6.2 在这里,根据站点提示的升级步骤 1.下载新版本sonarQub ...
- Codeforces 810 A.Straight «A»
A. Straight «A» time limit per test 1 second memory limit per test 256 megabytes input standard in ...