转载请表明出处,作者 keyboardsun
需要源代码,发邮件到keyboardsun@163.com
代码可以直接使用。
最近在开发JDF项目。项目中需要用到任务调度,自动任务等功能,想自己开发一个,但是看看 quartz 那么强劲,自己开发,开发加调试,可能需要些时日。如果用quartz可能一天就可以搞定,只需要配置点数据就可以了。
下面步入正题。讲解quartz的封装使用。
这里我把任务,以及任务的表达式配置到数据库里面。
如图:
如上图所示,配置了三个任务。
表结构介绍:
字段介绍:
TASK_ID 任务的主键
TASK_CODE 任务编码 ,这里启动任务的时候,作为qz任务的名称
TASK_TYPE_CODE 任务类型,这里启动任务的时候,作为qz任务的分组
TASK_IMPL_CLASS 任务的类。
TASK_EXPRESS 任务执行表达式
STATE_DATE 任务更新时间,这里在任务运行中,如果需要使运行中的任务修改立马生效,需要把这个字段的值设置大于当前时间。
STATE 任务状态
PARMS 任务初始化参数,任务运行的时候,可以从JobDataMap对象中获取该字段的值。
CREATE_DATE 创建日期,没有什么实际意义。
下面需要记录任务执行的日志,如下图所示
如上图所示,log编号是12 的任务正在执行中... STATE是R =run
字段解释
TASK_LOG_ID 任务日志编号
TASK_ID 任务编号
STATE 执行状态,如果是E 的,说明异常了,异常信息会放在REMARKS字段中
START_DATE 执行开始时间
FINISH_DATE 执行结束时间
REMARKS 备注。
下面要开始贴代码啦:如下图所示,一共包括如下这么多的JAVA文件。
一共包括文件为:
ITask.java 业务系统需要实现的接口方法。
JDBC.java 简单的数据库操作类
JobEngine 用于修改运行中的job的信息,定时扫描JOB_TASK配置表的改变信息。
JobTaskBean.java 表JOB_TASK对应的bean
Mouse.java 入口类,启动qz引擎。
Task.java 抽象类,用于记录qz 任务的日志,业务系统的任务需要继承这个类。
TaskLogBean.java 任务日志表TASK_LOG对应的Bean.
Test.java 测试任务。
下面开始贴代码啦:
ITask.java
JDBC.java
JobEngine.java
JobTaskBean.java
Mouse.java
Task.java
TaskLogBean.java
Test.java
下面我们在数据库里面添加两条任务。
INSERT INTO `job_task` VALUES ('1', 'TEST1', 'G1', 'net.chinacsharp.jdf.quartz.Test', '0/25 * * * * ?', '2009-07-09 16:48:00', 'U', '<item><key>sss</key><value>vvv</value></item><item><key>ss</key><value>vv</value></item>', null, '2009-07-07 16:07:41');
INSERT INTO `job_task` VALUES ('2', 'TEST2', 'G1', 'net.chinacsharp.jdf.quartz.Test', '0/20 * * * * ?', '2009-07-09 17:19:21', 'U', '<item><key>sss</key><value>vvv</value></item><item><key>ss</key><value>vv</value></item>', null, '2009-07-08 16:07:20');
INSERT INTO `job_task` VALUES ('3', 'TESTENGINE', 'ENG', 'net.chinacsharp.jdf.quartz.JobEngine', '0/7 * * * * ?', '2009-07-09 16:48:00', 'U', '<item><key>sss</key><value>vvv</value></item><item><key>ss</key><value>vv</value></item>', null, '2009-07-07 16:07:41');
这里的第三条任务是必须的。用于扫描JOB_TASK表的改动,及时把改动的部分覆盖到现有执行中的任务。
下面我们运行任务
我们查看日志信息
下面我们把执行的任务给改动下。
这里我把TASK_EXPRESS修改为 每秒执行1次,每2秒执行一次,然后把STATE_DATE的日期调整到迟与当前时间,这样JobEngine任务就可以扫描到改动了。下面我们看日志
如上所示,任务执行快多了噢。每秒就在执行。
下面我们察看执行的日志
下面我们自己开发一个任务把。如果你想自己开发一个任务,那么很简单,只需要两个步骤:
步骤一,新建一个类,继承Task.java实现execute(HashMap map)借口便可以
第二步:我们在表JOB_TASK配置任务。 这里把现有的人给改成不可用。减少日志输出,如下图
我们把1,2任务给关了,状态O了。把DEMO任务配置成每20秒执行一次。 PARMS字段为
<item><key>sss</key><value>vvv</value></item><item><key>ss</key><value>vv</value></item>
下面我们运行,察看日志:
这里20秒执行了一次,下面我们把任务的TASK_EXPRESS改成0/2 * * * * ?
STATE_DATE 改成 2009-07-15 20:30:31
这样就两秒执行一次,我们看输出:
这里两秒执行一次了噢。
分享到:
相关推荐
NULL 博文链接:https://ruoli.iteye.com/blog/2254928
Quartz动态创建任务,封装,项目中非常实用
非常详细的Quartz详细入门教程。新手值得一看,高手请忽略。
Quartz任务调度框架教程中文版 chm格式
Autofac.Extras.Quartz, Quartz.Net的Autofac集成 Autofac.Extras.Quartz用于 Quartz.Net的Autofac集成包。Autofac.Extras.Quartz 为每个石英作业创建嵌套的litefime作用域。 完成作业执行后释放嵌套作用域。这允许...
Quartz 是一种功能丰富的,开放源码的作业调度库,可以在几乎任何Java应用程序集成 - 从最小的独立的应用程序到规模最大电子商务系统。Quartz可以用来创建简单或复杂的日程安排执行几十,几百,甚至是十万的作业数 -...
定时任务quartz实现分组串行并行动态配置
从以上位置可以查看详细介绍。 网上能找到的Quartz Web管理的资料都是使用的一个国外人写...包括可以添加一个任务(添加的任务只能是实现了Quartz Job接口的任务),暂停、启动、删除任务。基本这些都能满足日常应用了。
Quartz详细入门教程.zip
Quartz官方文档汉化教程.描述的很详细,相信对您有帮助
https://blog.csdn.net/qq_34719168/article/details/106422975 博文内的代码
quartz scheduler getting started 的翻译
quartz-test.zip 常用封装 quartz-helper工具类 创建job,删除job 包括于spring的结合,还有实用数据库保存job,提供的数据库脚本
定时任务quartz
Quartz中文入门教程 前言 Quartz让任务调度简单 Quartz的发展史 上手Quartz Quartz内部架构 作业 作业管理和存储 有效作业存储 作业和触发器 调度一个作业 用调度器(Scheduler)调用你的作业 编程调度...
Springboot整合Quartz实现定时任务数据库动态配置,新增任务、修改cron表达式、暂停任务、恢复任务、删除任务等操作
-quartz基本上任何公司都会用到调度这个功能, 比如我们公司需要定期执行调度生成报表, 或者比如博客什么的定时更新之类的,都可以靠Quartz来完成。正如官网所说,小到独立应用大到大型电子商务网站, Quartz都能...
赠送jar包:quartz-2.3.2.jar; 赠送原API文档:quartz-2.3.2-javadoc.jar; 赠送源代码:quartz-2.3.2-sources.jar; 赠送Maven依赖信息文件:quartz-2.3.2.pom; 包含翻译后的API文档:quartz-2.3.2-javadoc-API...
文件里面包括 1:Quartz开发指南.pdf 2:Quartz从入门到进阶.pdf 3:QuartzBeginnerExample一个附带的工程例子 4:quartz-1.6.1.zip Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它...