常常会在Web应用中需要启动一个自己写的服务,比如说刷新主页,统计数据等,下面提供一种简单的方式.
作业类 :
通过实现 org.quartz.job 接口 , 覆盖了 execute(JobExecutionContext context) 方法。
这个方法可以包含我们想要执行的任何代码
package com;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class Job1 implements Job {
public Job1() {
}
public void execute(JobExecutionContext context)
throws JobExecutionException {
System.out.println("job1-" + new Date());
}
}
package com;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class Job2 implements Job {
public Job2() {
}
public void execute(JobExecutionContext context)
throws JobExecutionException {
System.out.println("job2-" + new Date());
}
}
编写quartz.properties文件,这个文件的默认名称就是quartz.properties,如果启动项目的时候,Quartz没有在工程中找到该文件,
就会从自己的jar包下面读取其默认的properties文件
quartz.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.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.fileName = quartz_job.xml
然后编写quartz_job.xml
<?xml version="1.0" encoding="UTF-8"?> <quartz> <job> <job-detail> <name>job1</name> <group>job</group> <job-class>com.Job1</job-class> </job-detail> <trigger> <cron> <name>t1</name> <group>job</group> <job-name>job1</job-name> <job-group>job</job-group> <cron-expression>0/10 * * * * ?</cron-expression> </cron> </trigger> </job> <job> <job-detail> <name>job2</name> <group>job</group> <job-class>com.Job2</job-class> </job-detail> <trigger> <cron> <name>t2</name> <group>job</group> <job-name>job2</job-name> <job-group>job</job-group> <cron-expression>0/20 * * * * ?</cron-expression> </cron> </trigger> </job> </quartz>
<cron-expression>0/20 * * * * ?</cron-expression>
Cron 表达式包括以下 7 个字段:秒 分 小时 月内日期 月 周内日期 年(可选字段)
意思是:从0秒开始计算,安排任务每 20 秒执行一次。
比如说现在是5点10分18秒启动的服务,它会从0秒(10分整)开始计算,到5点10分20秒执行,那么会先执行job2,接下来过10秒执行job1,过20秒执行job2.....
在配置文件中把jobdetail和trigger都作了定义并组合成一个job。
最后修改一下web.xml。
<servlet> <servlet-name>quartz</servlet-name> <servlet-class> org.quartz.ee.servlet.QuartzInitializerServlet </servlet-class> <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> <load-on-startup>1</load-on-startup> </servlet> 也可以使用监听器 <context-param> <param-name>config-file</param-name> <param-value>/quartz.properties</param-value> </context-param> <context-param> <param-name>shutdown-on-unload</param-name> <param-value>true</param-value> </context-param> <listener> <listener-class> org.quartz.ee.servlet.QuartzInitializerListener </listener-class> </listener>