自开发实现Quartz Web管理
网上能找到的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管理的更多相关文章
- 【青橙商城-管理后台开发】3. web模块搭建
[青橙商城-管理后台开发]3. web模块搭建 1.创建qingcheng_web_manager模块 pom.xml <?xml version="1.0" encodin ...
- Quartz(GUI)图形界面程序----Quartz Web
下载.设置和运行Quartz(GUI)图形界面程序----Quartz Web 一.获取Quartz Web程序(Quartz GUI).早期的 Quartz 框架开发者意识到一个 GUI 对于某类用 ...
- RDIFramework.NET V2.8版本 ━ 开发实例之产品管理(WinForm)
RDIFramework.NET V2.8版本 ━ 开发实例之产品管理(WinForm) 现在,我们使用.NET快速开发整合框架(RDIFramework.NET)来开发一个应用,此应用皆在说明如何使 ...
- Openstack的web管理端相关
openstack的web管理端技术方面要关注的问题. 同步?异步 先说浏览器的同步和异步,我们知道的浏览器可以使用ajax实现异步请求,就是浏览器在请求数据的时候,我们管理员还能对浏览器就行其他操作 ...
- SNF开发平台WinForm之四-开发-主细表管理页面-SNF快速开发平台3.3-Spring.Net.Framework
4.1运行效果: 4.2开发实现: 4.2.1 有了第一个程序的开发,代码生成器的配置应该是没有问题了,我们只要在对应的数据库中创建我们需要的表结构就可以了,如下: 主表结构如下: ...
- SNF开发平台WinForm之二-开发-单表表单管理页面-SNF快速开发平台3.3-Spring.Net.Framework
2.1运行效果: 2.2开发实现: 2.2.1 这个开发与第一个开发操作步骤是一致的,不同之处就是在生成完代码之后,留下如下圈红程序,其它删除. 第一个开发地址:开发-单表表格编辑管理页面 http: ...
- 【Python之旅】第六篇(七):开发简易主机批量管理工具
[Python之旅]第六篇(七):开发简易主机批量管理工具 python 软件开发 Paramiko模块 批量主机管理 摘要: 通过前面对Paramiko模块的学习与使用,以及Python中多线程与多 ...
- 【Web开发】Mean web开发 01-Express实现MVC模式开发
简介 Mean是JavaScript的全栈开发框架.更多介绍 用Express实现MVC模式开发是Mean Web全栈开发中的一部分. Express 是一个基于 Node.js 平台的极简.灵活的 ...
- 企业级memcached缓存数据库结合php使用与web管理memcached
环境 [root@cache01 ~]# cat /etc/redhat-release CentOS Linux release (Core) [root@cache01 ~]# uname -a ...
随机推荐
- 如何访问mvc 默认的错误页
在ActionResult 中: public ActionResult Error() { return View("~/Views/Shared/Error.cshtml"); ...
- Linux操作命令(六)
本次实验将介绍 Linux 命令中 wc 和 grep 命令的用法. wc grep 1.wc wc命令是一个统计的工具,主要用来显示文件所包含的行.字和字节数. wc命令是word count的缩写 ...
- 洛谷——P1292 倒酒
P1292 倒酒 题目描述 Winy是一家酒吧的老板,他的酒吧提供两种体积的啤酒,a ml和b ml,分别使用容积为a ml和b ml的酒杯来装载. 酒吧的生意并不好.Winy发现酒鬼们都非常穷.有时 ...
- oracle中 char,varchar,varchar2的区别
区别: 1. CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符) ...
- 【UOJ #131】【NOI 2015】品酒大会
http://uoj.ac/problem/131 求出后缀数组和height数组后,从大到小扫相似度进行合并,每次相当于合并两个紧挨着的区间. 合并区间可以用并查集来实现,每个区间的信息都记录在这个 ...
- 【ZJOI2017】线段树
题目描述 线段树是九条可怜很喜欢的一个数据结构,它拥有着简单的结构.优秀的复杂度与强大的 功能,因此可怜曾经花了很长时间研究线段树的一些性质. 最近可怜又开始研究起线段树来了,有所不同的是,她把目光放 ...
- 【DFS】佳佳的魔法阵
[vijos1284]佳佳的魔法阵 背景 也许是为了捕捉猎物(捕捉MM?),也许是因为其它原因,总之,佳佳准备设计一个魔法阵.而设计魔法阵涉及到的最关键问题,似乎就是那些带有魔力的宝石的摆放…… 描述 ...
- view加阴影和边框
UIImageView *imgvPhoto = [UIImageView alloc] init]; //添加边框 CALayer *layer = [_imgvPhoto layer]; ...
- python基础之re,sys,suprocess模块
re 正则表达式 1.什么是正则? 正则就是用一系列具有特殊含义的字符组成的规则,该规则用来描述具有某一特征的字符串. 正则就是用来在一个大的字符串匹配出符合规则的子字符串 2.为什么用正则? 正则可 ...
- 关于abstract class 和 interface
1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系.但是,一个类却可以实现多个interface. 2.在abstract class 中可以有自己 ...