在web环境下,Quartz可以通过配置文件来完成后台的作业调度,不必手工创建Trigger和Scheduler,其步骤如下:
首先将quartz.jar,以及lib目录下面core和optional两个目录中的所有jar全都放入项目WEB-INF\lib目录下
job就是一个简单的java类,这里的功能就是输出当前的时间了。
- import java.util.Date;
-
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- import org.quartz.Job;
- import org.quartz.JobExecutionContext;
- import org.quartz.JobExecutionException;
-
- public class Helloworld implements Job{
- public Helloworld() {
- }
-
- private static Log _log = LogFactory
- .getLog(Helloworld.class);
-
- public void execute(JobExecutionContext context)
- throws JobExecutionException {
- _log.info("Hello World! - " + new Date());
- }
- }
然后编写quartz.properties文件,这个文件的默认名称就是quartz.properties,如果启动项目的时候,Quartz没有在工程中找到该文件,就会从自己的jar包下面读取其默认的properties文件,其内容如下:
org.quartz.scheduler.instanceName = TestScheduler
org.quartz.scheduler.instanceId = one
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 2
org.quartz.threadPool.threadPriority = 4
org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingTriggerHistoryPlugin
org.quartz.plugin.triggHistory.triggerFiredMessage = Trigger {1}.{0} fired job {6}.{5} at: {4, date, HH:mm:ss MM/dd/yyyy}
org.quartz.plugin.triggHistory.triggerCompleteMessage = Trigger {1}.{0} completed firing job {6}.{5} at {4, date, HH:mm:ss MM/dd/yyyy} with resulting trigger instruction code: {9}
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.fileName = quartz_job.xml
org.quartz.plugin.jobInitializer.overWriteExistingJobs = false
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin
org.quartz.plugin.shutdownhook.cleanShutdown = true
上面的
org.quartz.plugin.jobInitializer.fileName = quartz_job.xml
是用来配置定义job文件的名称。
然后编写quartz_job.xml,
<quartz><job>
<trigger>
</trigger>
</job>
- <?xml version="1.0" encoding="UTF-8"?>
- <quartz>
- <job>
- <job-detail>
- <name>helloworld</name>
- <group>group1</group>
- <job-class>Helloworld</job-class>
- </job-detail>
- <trigger>
- <cron>
- <name>test</name>
- <group>group1</group>
- <job-name>helloworld</job-name>
- <job-group>group1</job-group>
- <cron-expression>0 0/1 * * * ?</cron-expression>
- </cron>
- </trigger>
- </job>
- </quartz>
</quartz>
可以看到,在配置文件中把jobdetail和trigger都作了完整的定义,并组合成一个job。下面,我们把上面两个文件都放入/WEB-INF/classes目录下,然后按照api中的说明修改一下web.xml。
- <servlet>
- <servlet-name>
- QuartzInitializer
- </servlet-name>
- <display-name>
- Quartz Initializer Servlet
- </display-name>
- <servlet-class>
- org.quartz.ee.servlet.QuartzInitializerServlet
- </servlet-class>
- <load-on-startup>1</load-on-startup>
- <init-param>
- <param-name>config-file</param-name>
- <param-value>/quartz.properties</param-value>
- </init-param>
- <init-param>
- <param-name>shutdown-on-unload</param-name>
- <param-value>true</param-value>
- </init-param>
- </servlet>
这样,在启动Tomcat的时候,QuartzInitializerServlet这个Servlet就会自动读取quartz.properties这个配置文件,并初始化调度信息,启动Scheduler。
我在这里用的是Quartz1.5.0,在1.5.1中新增加了QuartzInitializerListener,但是似乎有些问题,始终启动不起来,而且更过分的是,它的api居然写错了,在
<listener-class>这个标记中,用了 QuartzInitializerServletListener,就算把机器砸了,它也找不到这个类啊!</listener-class>
现在就大功告成了
一个Job类,一个quartz.properties文件,一个quertz_job.xml文件,还有修改一下web.xml文件,很简单呀!
不过看起来简单,解决的过程却很郁闷,单单是考虑如何在后台进程中运行Servlet就花了好长时间,后来查资料以后才知道可以用Listener或者是启动时运行的Servlet来完成,看来自己的底子还是不扎实的.
另外就是在Tomcat出现问题的时候,居然忘了到logs下面去看日志,这个疏忽是不可原谅的!以后要牢牢记住!
分享到:
相关推荐
web环境下通过配置文件来完成Quartz的后台作业调度源代码
网上能找到的Quartz Web管理的资料都是使用的一个国外人写的Quartz WebApp的东东,功能也很全面。但是作为自己的应用其实用不了那么多功能,一般我们只要可以定义一个job,指定一个Cron表达式完成工作即可,附带的...
web项目集成quartz,从简单到复杂,1-9分开展示quartz的集成到配置,希望和大家一起学习一下
web工程中使用quartz的配置方法,完整实例
完整JSPWEB下使用quartz实例源码+ApplicationContextListener,启动WEB的同时,可以启动一个定时器,同时每隔5秒自动执行三个任务,具体可以看代码 这是我的练手作品,请指教
quartz_web.rar quartz定时任务小例子
Quartz + spring的开发步骤Quartz + spring的开发步骤
Quartz单独开发用到的所有的jar包,包括web开发部分,下载后直接用,不需要导入其他的jar包。
Quartz 开发指南(附源码)Quartz 开发指南(附源码)Quartz 开发指南(附源码)Quartz 开发指南(附源码)
基于springmvc+mybatius+quartz实现的web管理的持久化定时任务。使用了JDBC和插件方式实现任务的添加。只需修改jdbc配置并将sql文件在数据库中运行即可运行。
NULL 博文链接:https://liangjian103.iteye.com/blog/1141253
NULL 博文链接:https://medbricom.iteye.com/blog/1782765
Quartz开发指南.pdf
定时任务管理带WEB管理界面-quartz-web
Java Quartz开发的特性,及Java Quartz开发实例。
Quartz2.2版本开发手册(JAVA)
quartz 2.2.2开发包(最新)开发包和所有的官方示例
quartz通过cron实现web项目定时器;这是个maven项目,通过quartz架构是现在不同cron表达式定时启动。
好像很多人整合出现了问题,所以抽个demo出来 是一个demo包含源码和lib 在tomcat下可以执行
这个是个简单的quartz定时器,java类和配置文件都已经写好,怎么配置和设置时间都有详细的说明,下载即可用。