自开发实现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 ...
随机推荐
- bootstrap bootstrapvalidator插件+adjax验证使用
1.利用bootstrap Validator表单验证进行表单验证需要如下CSS和JS. <link rel="stylesheet" type="text/css ...
- HDU 4865 Peter's Hobby
$dp$. 这题的本质和求一个有向无环图的最长路径长度的路径是一样的. $dp[i][j]$表示到第$i$天,湿度为$a[i]$,是第$j$种天气的最大概率.记录一下最大概率是$i-1$天哪一种天气推 ...
- VB查询数据库之写入数据库——机房收费系统总结(三)
在机房收费系统中,新注册的用户,更改的密码,上机下级记录,上机收费记录等等都要写入数据库,这样,后面的查询才能生效.像数据库中写入数据,首先,找到你要写入数据的数据库中的表,在表中建立新的行,让后再把 ...
- 【UOJ #131】【NOI 2015】品酒大会
http://uoj.ac/problem/131 求出后缀数组和height数组后,从大到小扫相似度进行合并,每次相当于合并两个紧挨着的区间. 合并区间可以用并查集来实现,每个区间的信息都记录在这个 ...
- 洛谷P1113 杂务
题目描述 John的农场在给奶牛挤奶前有很多杂务要完成,每一项杂务都需要一定的时间来完成它.比如:他们要将奶牛集合起来,将他们赶进牛棚,为奶牛清洗乳房以及一些其它工作.尽早将所有杂务完成是必要的,因为 ...
- 【BFS】Pots
[poj3414]Pots Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16925 Accepted: 7168 ...
- 求n以内的质数的数量
- python函数式编程之匿名函数、装饰器、偏函数
匿名函数 当我们在传入函数时,有些时候,不需要显式的定义函数,直接传入匿名函数就行.如下面 lambda x: x*x 在python中,关键字lambda表示匿名函数,冒号前面的x表示函数参数 匿名 ...
- Generator函数(一)
Generator函数是ES6提供的一种异步编程解决方案,语法行为与传统函数完全不同.对于这个函数有多种理解.从语法上来理解,可以将它理解成一个状态机,封装了多个内部状态.内部的不同状态是通过yiel ...
- Codeforces Round #344 (Div. 2) D. Messenger kmp
D. Messenger 题目连接: http://www.codeforces.com/contest/631/problem/D Description Each employee of the ...