网上能找到的QuartzWeb管理的资料都是使用的一个国外人写的Quartz WebApp的东东。功能也非常全面。

可是作为自己的应用其有用不了那么多功能,一般我们仅仅要能够定义一个job,指定一个Cron表达式完毕工作就可以,附带的能够再对任务进行暂停与重新启动,基本就能够满足应用了。并且网上那个东西略微还是有点复杂的,不方便集成的自己的项目中。不管是风格还是样式。

基于这种原因。也是为了学习一个Quartz(曾经还没实用到过)。

就想着做一个简单Quartz的Web管理工具。包含能够加入一个任务(加入的任务仅仅能是实现了Quartz Job接口的任务),暂停、启动、删除任务。

基本这些都能满足日常应用了。

列表界面:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

加入任务界面

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

暂停、重新启动没有界面。

事实上要求不太复杂时以上功能完毕能满足应用了。

假设要改动一个任务的时间删除重建就能够了。

实现这些功能仅仅有简单的两个JSP、两个Servlet、两个辅助类而已。集成的自己的项目中时非常easy改动。

这个功能是要求使用Quartz本地化存储的JobStoreTX方式的。而不是RAMJobStore。

与自己的项目集成时,可能要改动的点包含下面几个方面。

1、  TaskListServlet中使用了项目中本身的数据源,须要依据实际情况改动。TaskOprateServlet中主要是为了完毕相关操作,不涉及数据库。调用的都是Quartz的API。

须要有须要,全然能够将这两个JSP中的内容迁移到自己项目中的Action或Controller下。

2、  相关JSP中引入的JS文件路径须要改动。也可能须要改动你訪问后台资源的路径URL。

3、  由于要将Quartz的Job信息存储到数据库中,所以我们要使用Quartz的JobStoreTX。这些须要配置的东西都是在quartz.properties中,我的这个文件内容例如以下:

#===============================================================
#Configure Main Scheduler Properties
#===============================================================
org.quartz.scheduler.instanceName=QuartzScheduler
org.quartz.scheduler.instanceId=AUTO #===============================================================
#Configure ThreadPool
#===============================================================
org.quartz.threadPool.threadCount =5
org.quartz.threadPool.threadPriority =5
org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool #===============================================================
#Configure JobStore
#===============================================================
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass =org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
org.quartz.jobStore.tablePrefix = QRTZ_
#============================================================================
# Configure Datasources
#============================================================================
org.quartz.jobStore.dataSource = myDS org.quartz.dataSource.myDS.driver =oracle.jdbc.driver.OracleDriver
org.quartz.dataSource.myDS.URL = jdbc:oracle:thin:@localhost:1521:orcl
org.quartz.dataSource.myDS.user = loushang_test
org.quartz.dataSource.myDS.password = loushang_test
org.quartz.dataSource.myDS.maxConnections = 5 #===============================================================
#Configure Plugins only config JobInitializationPlugin but read quartz_jobs.xml file
#===============================================================
org.quartz.plugin.jobInitializer.class=org.quartz.plugins.xml.JobInitializationPlugin org.quartz.plugin.jobInitializer.overWriteExistingJobs=true
org.quartz.plugin.jobInitializer.failOnFileNotFound=true
org.quartz.plugin.jobInitializer.validating=false

4、  JobTools类中QUARTZ_INSTANCE_NAME配置的是quartz.properties配置文件里的instanceName的值。

事实上配置不配置都能够。但还是建议配置。

基本上就这么多了。总之是相当简单。在这个应用中是要求将全部的job与trigger都使用同一个DEFAULT组。

后台的代码基本上简单的不能再简单了。以加入任务为例。代码例如以下:

String jobName = req.getParameter("jobName");
String jobGroup = req.getParameter("jobGroup");
String triggerName = req.getParameter("triggerName");
String triggerGroup = req.getParameter("triggerGroup");
String JobClassName = req.getParameter("JobClassName");
String jobDescription = req.getParameter("jobDescription");
String cronExpression = req.getParameter("cronExpression");
String startTime = req.getParameter("startTime");
String endTime = req.getParameter("endTime"); CronTrigger ct = new CronTrigger(triggerName.trim(),triggerGroup,cronExpression);
if(startTime!=null && !"".equals(startTime)){
Date date = JobTools.paraseToDate(startTime);
ct.setStartTime(date);
}
if(endTime!=null && !"".equals(endTime)){
Date date = JobTools.paraseToDate(endTime);
ct.setEndTime(date);
} Class clz = Class.forName(JobClassName.trim());
JobDetail jd = new JobDetail(jobName.trim(),jobGroup,clz);
jd.setDescription(jobDescription.trim()); Scheduler scheduler = JobTools.getScheduler();
scheduler.scheduleJob(jd, ct);

能够从下面位置下载案例代码

http://download.csdn.net/detail/srar_hanshui/8867063

自开发实现Quartz Web管理的更多相关文章

  1. 【青橙商城-管理后台开发】3. web模块搭建

    [青橙商城-管理后台开发]3. web模块搭建 1.创建qingcheng_web_manager模块 pom.xml <?xml version="1.0" encodin ...

  2. Quartz(GUI)图形界面程序----Quartz Web

    下载.设置和运行Quartz(GUI)图形界面程序----Quartz Web 一.获取Quartz Web程序(Quartz GUI).早期的 Quartz 框架开发者意识到一个 GUI 对于某类用 ...

  3. RDIFramework.NET V2.8版本 ━ 开发实例之产品管理(WinForm)

    RDIFramework.NET V2.8版本 ━ 开发实例之产品管理(WinForm) 现在,我们使用.NET快速开发整合框架(RDIFramework.NET)来开发一个应用,此应用皆在说明如何使 ...

  4. Openstack的web管理端相关

    openstack的web管理端技术方面要关注的问题. 同步?异步 先说浏览器的同步和异步,我们知道的浏览器可以使用ajax实现异步请求,就是浏览器在请求数据的时候,我们管理员还能对浏览器就行其他操作 ...

  5. SNF开发平台WinForm之四-开发-主细表管理页面-SNF快速开发平台3.3-Spring.Net.Framework

    4.1运行效果: 4.2开发实现: 4.2.1          有了第一个程序的开发,代码生成器的配置应该是没有问题了,我们只要在对应的数据库中创建我们需要的表结构就可以了,如下: 主表结构如下: ...

  6. SNF开发平台WinForm之二-开发-单表表单管理页面-SNF快速开发平台3.3-Spring.Net.Framework

    2.1运行效果: 2.2开发实现: 2.2.1 这个开发与第一个开发操作步骤是一致的,不同之处就是在生成完代码之后,留下如下圈红程序,其它删除. 第一个开发地址:开发-单表表格编辑管理页面 http: ...

  7. 【Python之旅】第六篇(七):开发简易主机批量管理工具

    [Python之旅]第六篇(七):开发简易主机批量管理工具 python 软件开发 Paramiko模块 批量主机管理 摘要: 通过前面对Paramiko模块的学习与使用,以及Python中多线程与多 ...

  8. 【Web开发】Mean web开发 01-Express实现MVC模式开发

    简介 Mean是JavaScript的全栈开发框架.更多介绍 用Express实现MVC模式开发是Mean Web全栈开发中的一部分. Express 是一个基于 Node.js 平台的极简.灵活的 ...

  9. 企业级memcached缓存数据库结合php使用与web管理memcached

    环境 [root@cache01 ~]# cat /etc/redhat-release CentOS Linux release (Core) [root@cache01 ~]# uname -a ...

随机推荐

  1. Nodejs Bot学习

    关于示例部分可以参考<BotFramework Nodejs示例><BotBuilder Nodejs示例查看> Bot Framework Nodejs SDK包括几种与用户 ...

  2. 洛谷P4587 [FJOI2016]神秘数(主席树)

    题面 洛谷 题解 考虑暴力,对于询问中的一段区间\([l,r]\),我们先将其中的数升序排序,假设当前可以表示出\([1,k]\)目前处理\(a_i\),假如\(a_i>k+1\),则答案就是\ ...

  3. 51nod 1201 (dp)

    整数划分 将N分为若干个不同整数的和,有多少种不同的划分方式,例如:n = 6,{6} {1,5} {2,4} {1,2,3},共4种.由于数据较大,输出Mod 10^9 + 7的结果即可.   In ...

  4. 【大杀器】利用划分树秒杀区间内第k大的数

    最近看了一道题,大概就是给出一个序列,不断询问其子区间内第k大的数,下面是个截图 绕了一圈没找到中文版题目,if(你是大佬) then 去看截图:else{我来解释:给出一个整数n,和一个整数m,分别 ...

  5. 【HDU 5283】Senior's Fish

    http://acm.hdu.edu.cn/showproblem.php?pid=5283 今天的互测题,又爆零了qwq 考虑每个点对答案的贡献. 对每个点能产生贡献的时间线上的左右端点整体二分. ...

  6. 【转】python assert用法

    1.assert语句用来声明某个条件是真的.2.如果你非常确信某个你使用的列表中至少有一个元素,而你想要检验这一点,并且在它非真的时候引发一个错误,那么assert语句是应用在这种情形下的理想语句.3 ...

  7. hdu 5963 朋友(2016ccpc 合肥站 C题)

    朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submissi ...

  8. 【状压dp】CDOJ1608 暑假集训

    裸的状压的话,很显然……但有一个强大的优化. 就是在枚举决策的时候,固定第一个空位置.可以证明,这样状态数没有减少,但是降低了很多重复访问. 因为你在枚举的时候,总是可以划分为包含第一个空位置的3个位 ...

  9. 【构造】CDOJ1607 大学生足球联赛

    请自行百度逆时针轮转法 //单循环赛 逆时针轮转法 #include<cstdio> using namespace std; int n,a[70]; int main(){ scanf ...

  10. 【KMP模板】POJ3461-Oulipo

    [题意] 找出第一个字符串在第二个字符串中出现次数. [注意点] 一定要先将strlen存下来,而不能每次用每次求,否则会TLE! #include<iostream> #include& ...