项目ITP(七) javaWeb 整合 Quartz 实现动态调度 而且 持久化
项目ITP(七) javaWeb 整合 Quartz 实现动态调度 而且 持久化
原创地址:http://www.cnblogs.com/Alandre/(泥沙砖瓦浆木匠),须要转载的,保留下!
弟子规 圣人训 首孝弟 次谨信 泛爱众 而亲仁 有余力 则学文
Written In The Font
须要:WEB-INF/lib/quartz-2.2.1.jar
基本步骤:
- web.xml注冊监听器ScheduleStartListener
- 监听器类sedion.jeffli.wmuitp.listener.ScheduleStartListener实现
- 測试案例第一步: Job 接口实现类JobTest
- 測试案例第二步:QuartzTest
web.xml注冊监听器ScheduleStartListener
注冊quartz监听器,监听项目是否启动或者重新启动.保证项目启动或重新启动时,全部任务会被又一次安排到任务调度中.
web.xml增加一个Listener:
<!-- quartz监听器 -->
<listener>
<listener-class>sedion.jeffli.wmuitp.listener.ScheduleStartListener</listener-class>
</listener>
监听器类sedion.jeffli.wmuitp.listener.ScheduleStartListener实现
监听器类主要是实现recovery各个任务,又一次恢复在triggerGroups组中全部的触发器,按新的trigger又一次设置job运行.顺便说下,这个异常自己定义(不须要删除就可以): sedion.jeffli.wmuitp.exception.QuartzException;

package sedion.jeffli.wmuitp.listener; import java.util.List; import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener; import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory; import sedion.jeffli.wmuitp.exception.QuartzException; public class ScheduleStartListener implements ServletContextListener
{ public void contextDestroyed(ServletContextEvent sce)
{ } public void contextInitialized(ServletContextEvent sce)
{
try
{
recovery();
}
catch (Exception e)
{
throw new QuartzException(" ScheduleStartListener contextInitialized ERROR!!",e);
}
} public void recovery()
{ Scheduler scheduler = null; try { SchedulerFactory schedulerFactory = new StdSchedulerFactory();
scheduler = schedulerFactory.getScheduler();//能够通过SchedulerFactory创建一个Scheduler实例
List<String> triggerGroups = scheduler.getTriggerGroupNames();//获取调度器中全部的触发器组
System.out.println("调度器中全部的触发器组 size():"+triggerGroups.size()); if(triggerGroups != null && triggerGroups.size() != 0)//又一次恢复在triggerGroups组中全部的触发器
{
for (int i = 0; i < triggerGroups.size(); i++)
{
TriggerKey triggerKey = TriggerKey.triggerKey(triggerGroups.get(i), triggerGroups.get(i));
System.out.println("triggerKey:"+triggerKey); Trigger tg = scheduler.getTrigger(triggerKey);//获取trigger
System.out.println(triggerKey+" -> 运行时间 :"+tg.getNextFireTime()); scheduler.rescheduleJob(triggerKey, tg);//按新的trigger又一次设置job运行
}
} scheduler.start(); }
catch (Exception e)
{
throw new QuartzException("ScheduleStartListener recovery() Error!", e);
}
}
}

測试案例第一步: Job 接口实现类JobTest
顾名思义,用于自己定义任务,方法的实现.你能够在当中写入随意你想要在那个点上干的事情(操作数据库,前台显示等).在以下那处地方写入你想要写的:System.out.println("添入须要增加任务的详细操作");
.顺便说下,这个异常自己定义(不须要删除就可以):

package test.quartz; import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory; import sedion.jeffli.wmuitp.exception.QuartzException; public class JobTest implements Job{ public JobTest() {} public void execute(JobExecutionContext context)throws JobExecutionException
{ JobDataMap data = context.getJobDetail().getJobDataMap();
System.out.println("data.testId : "+data.getInt("testId")); //不须要可删除 try
{
System.out.println("添入须要增加任务的详细操作");
}
catch (Exception e)
{
throw new QuartzException("JobTest execute() ERROR !!", e);
}
} public static void removeJob(JobKey jobKey, TriggerKey tiKey)throws SchedulerException
{ SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler(); sched.pauseTrigger(tiKey); //停止触发器
sched.unscheduleJob(tiKey); //移除触发器
sched.deleteJob(jobKey); //删除任务 }
}

測试案例第二步:QuartzTest
顾名思义,用于实现,检验.能够通过SchedulerFactory创建一个Scheduler实例,把触发器在集群节点实例命名的组仅仅是为了区分(伐木)从什么地方定问调度又一次运行此作业,假设它是正在进行时调度下去.

package test.quartz; import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger; import java.util.Date; import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory; public class QuartzTest
{ public void run(String date, int id)throws Exception
{ SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();//能够通过SchedulerFactory创建一个Scheduler实例 //设置工作详情
JobDetail job = newJob(JobTest.class)
.withIdentity("job_"+id, "test"+id) // (String name, String group)把触发器在集群节点实例命名的组仅仅是为了区分(伐木)从什么地方定问调度又一次运行此作业,假设它是正在进行时调度下去...
.requestRecovery()
.build(); job.getJobDataMap().put("testId", id); //设置存储參数(不须要可删除) Date startDate = FormatDate.stringToDateAll(date);//Date转String
//设置触发器
SimpleTrigger trigger = (SimpleTrigger) newTrigger()
.withIdentity("overdue"+id, "overdue"+id)//withIdentity("trigger", "group")
.startAt(startDate)
.build(); scheduler.scheduleJob(job, trigger);
scheduler.start();
System.out.println("------- Start Scheduler ----------------");
} public static void main(String[] args) throws Exception
{
QuartzTest quartzOverdue = new QuartzTest();
quartzOverdue.run("2014-07-02 00:30:00",666);//666,随便的吉祥数字
}
}

这边,项目tomcat启动.这边我的主机时间是:
然后我们运行:
public static void main(String[] args) throws Exception
{
QuartzTest quartzOverdue = new QuartzTest();
quartzOverdue.run("2014-07-02 00:30:00",666);//666,随便的吉祥数字
}
看控制台:
先输出
------- Start Scheduler ----------------
然后时间到了
添入须要增加任务的详细操作
项目ITP(七) javaWeb 整合 Quartz 实现动态调度 而且 持久化的更多相关文章
- 项目ITP(七) javaWeb 整合 Quartz 实现动态调度 并且 持久化
原创地址:http://www.cnblogs.com/Alandre/(泥沙砖瓦浆木匠),需要转载的,保留下! 弟子规 圣人训 首孝弟 次谨信 泛爱众 而亲仁 有余力 则学文 Written In ...
- 项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷!
前言 系列文章:[传送门] 洗了个澡,准备写篇博客.然后看书了.时间 3 7 分.我慢慢规律生活,向目标靠近. 很喜欢珍惜时间像叮当猫一样 正文 慢慢地,二维码实现签到将要落幕了.下篇文章出二维码实 ...
- 项目ITP(六) spring4.0 整合 Quartz 实现动态任务调度
前言 系列文章:[传送门] 项目需求: http://www.cnblogs.com/Alandre/p/3733249.html 上一博客写的是基本调度,后来这只能用于,像每天定个时间 进行数据库备 ...
- 项目ITP(五) spring4.0 整合 Quartz 实现任务调度
前言 系列文章:[传送门] 项目需求: 二维码推送到一体机上,给学生签到扫描用.然后需要的是 上课前20分钟 ,幸好在帮带我的学长做 p2p 的时候,接触过.自然 quartz 是首选.所以我就配置了 ...
- SSM项目整合Quartz
一.背景 SSM项目中要用到定时器,初期使用Timer,后来用spring 的schedule,都比较简单,所以功能比较单一而且他们不能动态的配置时间.后来就研究quartz,准备整合到项目中.Qua ...
- 初识quartz 并分析 项目中spring整合quartz的配置【原创+转载】
初识quartz 并分析 项目中spring整合quartz的配置[原创+转载]2018年01月29日 12:08:07 守望dfdfdf 阅读数:114 标签: quartz 更多个人分类: 工具 ...
- Spring 3整合Quartz 2实现手动设置定时任务:新增,修改,删除,暂停和恢复(附带源码)
摘要:在项目的管理功能中,对定时任务的管理有时会很常见.但一般定时任务配置都在xml中完成,包括cronExpression表达式,十分的方便.但是如果我的任务信息是保存在数据库的,想要动态的初始化, ...
- 【淘淘】Spring整合Quartz框架
我在外面工作实习的时候,我们做的项目是一个日报子系统,也就是定时定点为公司生成一些报表数据还有一些数据反馈.这时候我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等.当时,我做 ...
- Spring整合Quartz实现持久化、动态设定时间
一.spring整合 网上一搜有很多整合的方式,这里我采用了其中的一种(暂时还没有对其他的方法研究过). 对于spring的整合其中的任务,spring提供了几个类.接口(这些类都实现了Job接口): ...
随机推荐
- Mybatis Plus 入坑(含最新3.X配置)
简介 Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发.提高效率而生. 使用它可以简化单表的操作, 节省开发时间, 国人 ...
- const 有什么用途
可以定义const 常量:const可以修饰函数的参数.返回值,甚至函数的定义体.被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性
- JQuery--漂亮的三目运算与jQ选择器结合代码
$(function($) { $("input[name='timeset']").bind('click', function() { $(this).val() == 'cu ...
- 「EJOI2017」-骆驼
第一道构造题祭…… 文字叙述: 题目的提示很明显. $N$是$5$的倍数,所以考虑分成$5 \times 5$小块连在一起. 首先通过打表证明, 小块里从任何一点出发,经过所有的格,从任一一点跳出,一 ...
- PAT甲级——A1052 Linked List Sorting
A linked list consists of a series of structures, which are not necessarily adjacent in memory. We a ...
- Maven入门指南:仓库
1 . 仓库简介 没有 Maven 时,项目用到的 .jar 文件通常需要拷贝到 /lib 目录,项目多了,拷贝的文件副本就多了,占用磁盘空间,且难于管理.Maven 使用一个称之为仓库的目录,根据构 ...
- LA4670 Dominating Patterns AC自动机模板
Dominating Patterns 每次看着别人的代码改成自己的模板都很头大...空间少了个0卡了好久 裸题,用比map + string更高效的vector代替蓝书中的处理方法 #include ...
- Leetcode448.Find All Numbers Disappeared in an Array找到所有数组中消失的数字
给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次. 找到所有在 [1, n] 范围之间没有出现在数组中的数字. 您能在不 ...
- 获取MMSQL数据库表信息
SELECT 表名 then d.name else '' end, 表说明 then isnull(f.value,'') else '' end, 字段序号=a.colorder, 字段名=a.n ...
- 访问树中的所有元素(DOM)
创建一个函数,给定页面上的DOM元素,将访问元素本身及其所有后代(而不仅仅是它的直接子代).对于访问的每个元素,函数应将该元素传递给提供的回调函数. 函数的参数应该是: 一个DOM元素 一个回调函数( ...