`
dearwolf
  • 浏览: 340286 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

web环境下开发quartz简易攻略

阅读更多

在web环境下,Quartz可以通过配置文件来完成后台的作业调度,不必手工创建Trigger和Scheduler,其步骤如下:

首先将quartz.jar,以及lib目录下面core和optional两个目录中的所有jar全都放入项目WEB-INF\lib目录下

job就是一个简单的java类,这里的功能就是输出当前的时间了。


 
  1. import java.util.Date;  
  2.   
  3. import org.apache.commons.logging.Log;  
  4. import org.apache.commons.logging.LogFactory;  
  5. import org.quartz.Job;  
  6. import org.quartz.JobExecutionContext;  
  7. import org.quartz.JobExecutionException;  
  8.   
  9. public class Helloworld implements Job{  
  10.  public Helloworld() {  
  11.  }  
  12.   
  13.  private static Log _log = LogFactory  
  14.    .getLog(Helloworld.class);  
  15.   
  16.  public void execute(JobExecutionContext context)  
  17.    throws JobExecutionException {  
  18.   _log.info("Hello World! - " + new Date());  
  19.  }  
  20. }  

然后编写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>


 
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <quartz>  
  3.   <job>  
  4.     <job-detail>  
  5.       <name>helloworld</name>  
  6.       <group>group1</group>  
  7.       <job-class>Helloworld</job-class>  
  8.     </job-detail>  
  9.     <trigger>  
  10.       <cron>  
  11.         <name>test</name>  
  12.         <group>group1</group>  
  13.         <job-name>helloworld</job-name>  
  14.         <job-group>group1</job-group>  
  15.         <cron-expression>0 0/1 * * * ?</cron-expression>  
  16.      </cron>  
  17.     </trigger>  
  18.   </job>  
  19. </quartz>  

</quartz>

可以看到,在配置文件中把jobdetail和trigger都作了完整的定义,并组合成一个job。下面,我们把上面两个文件都放入/WEB-INF/classes目录下,然后按照api中的说明修改一下web.xml。


 
  1. <servlet>  
  2.          <servlet-name>  
  3.              QuartzInitializer  
  4.          </servlet-name>  
  5.          <display-name>  
  6.              Quartz Initializer Servlet  
  7.          </display-name>  
  8.          <servlet-class>  
  9.              org.quartz.ee.servlet.QuartzInitializerServlet  
  10.          </servlet-class>  
  11.          <load-on-startup>1</load-on-startup>  
  12.          <init-param>  
  13.              <param-name>config-file</param-name>  
  14.              <param-value>/quartz.properties</param-value>  
  15.          </init-param>  
  16.          <init-param>  
  17.              <param-name>shutdown-on-unload</param-name>  
  18.              <param-value>true</param-value>  
  19.          </init-param>  
  20. </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下面去看日志,这个疏忽是不可原谅的!以后要牢牢记住!

分享到:
评论
1 楼 futionbai 2008-08-26  
你写的很好。我的是在rcp下面是用quartz还得自己摸索..........

相关推荐

Global site tag (gtag.js) - Google Analytics