用Quartz实现定时任务
2008-07-10 18:46
274 查看
你曾经需要应用执行一个任务吗?这个任务每天或每周星期二晚上11:30,或许仅仅每个月的最后一天执行。一个自动执行而无须干预的任务在执行过程中如果 发生一个严重错误,应用能够知到其执行失败并尝试重新执行吗?你和你的团队是用java编程吗?如果这些问题中任何一个你回答是,那么你应该使用 Quartz调度器。
旁注:Matrix目前就大量使用到了Quartz。比如,排名统计功能的实现,在Jmatrix里通过Quartz定义了一个定时调度作业,在每天凌晨一点,作业开始工作,重新统计大家的Karma和排名等。
还有,RSS文件的生成,也是通过Quartz定义作业,每隔半个小时生成一次RSS XML文件。
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个, 甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。
http://www.opensymphony.com/quartz/
从下载连接取得Quartz的发布版本,并且解压到到本地 目录。这个下载文件包含了一个预先构建好的Quartz二进制文件(quartz.jar),你可以将它放进自己的应用中。Quartz框架只需要少数的 第三方库,并且这些三方库是必需的,你很可能已经在使用这些库了。
你要把Quartz的安装目录的
quartz.properties文件
Quartz有一个叫做 quartz.properties的配置文件,它允许你修改框架运行时环境。缺省是使用Quartz.jar里面的quartz.properties 文件。当然,你应该创建一个quartz.properties文件的副本并且把它放入你工程的classes目录中以便类装载器找到它。 quartz.properties样本文件如例1所示。
例1.quartz.properties文件允许修改Quartz运行环境:
一旦将Quartz.jar文件和第三方库加到自己的工程里面并且quartz.properties文件在工程的classes目录中,就可以创建作业了。
1. 在web.xml里面加上
package.ContextListener
这样就可以在部署的时候启动定时器。
package.ContextListener.java
Runner.java
[/b]YourScheduleJob.java
[/b]
旁注:Matrix目前就大量使用到了Quartz。比如,排名统计功能的实现,在Jmatrix里通过Quartz定义了一个定时调度作业,在每天凌晨一点,作业开始工作,重新统计大家的Karma和排名等。
还有,RSS文件的生成,也是通过Quartz定义作业,每隔半个小时生成一次RSS XML文件。
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个, 甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。
http://www.opensymphony.com/quartz/
从下载连接取得Quartz的发布版本,并且解压到到本地 目录。这个下载文件包含了一个预先构建好的Quartz二进制文件(quartz.jar),你可以将它放进自己的应用中。Quartz框架只需要少数的 第三方库,并且这些三方库是必需的,你很可能已经在使用这些库了。
你要把Quartz的安装目录的
quartz.properties文件
Quartz有一个叫做 quartz.properties的配置文件,它允许你修改框架运行时环境。缺省是使用Quartz.jar里面的quartz.properties 文件。当然,你应该创建一个quartz.properties文件的副本并且把它放入你工程的classes目录中以便类装载器找到它。 quartz.properties样本文件如例1所示。
例1.quartz.properties文件允许修改Quartz运行环境:
一旦将Quartz.jar文件和第三方库加到自己的工程里面并且quartz.properties文件在工程的classes目录中,就可以创建作业了。
1. 在web.xml里面加上
package.ContextListener
这样就可以在部署的时候启动定时器。
package.ContextListener.java
package package; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.quartz.SchedulerException; public class ContextListener implements ServletContextListener { Runner qRunner = null; public void contextInitialized(ServletContextEvent arg0) { // init job // start schedule task try { qRunner = new Runner(); qRunner.task(); } catch (Exception e) { e.printStackTrace(); } } public void contextDestroyed(ServletContextEvent arg0) { try { // stop task qRunner.stop(); } catch (SchedulerException e) { e.printStackTrace(); } } }
Runner.java
[b]import org.quartz.CronExpression; import org.quartz.CronTrigger; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SchedulerFactory; import org.quartz.impl.StdSchedulerFactory; /** */ public class Runner { static Scheduler scheduler = null; public void task() throws SchedulerException { // Initiate a Schedule Factory SchedulerFactory schedulerFactory = new StdSchedulerFactory(); // Retrieve a scheduler from schedule factory scheduler = schedulerFactory.getScheduler(); // current time long ctime = System.currentTimeMillis(); // Initiate JobDetail with job name, job group, and executable job class JobDetail jobDetail = new JobDetail("jobDetail1", "jobDetailGroup1", YourScheduleJob.class); // Initiate CronTrigger with its name and group name CronTrigger cronTrigger = new CronTrigger("cronTrigger", "triggerGroup1"); try { // setup CronExpression CronExpression cexp = new CronExpression("0/180 * * * * ?"); // Assign the CronExpression to CronTrigger cronTrigger.setCronExpression(cexp); } catch (Exception e) { e.printStackTrace(); } // schedule a job with JobDetail and Trigger scheduler.scheduleJob(jobDetail, cronTrigger); // start the scheduler scheduler.start(); } public void stop() throws SchedulerException { scheduler.shutdown(); } public static void main(String args[]) { try { Runner qRunner = new Runner(); qRunner.task(); } catch (Exception e) { e.printStackTrace(); } } }
[/b]YourScheduleJob.java
[b]import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class YourScheduleJob implements Job { public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("In SimpleQuartzJob - executing its JOB at " + new Date() + " by " + context.getTrigger().getName()); // your job here } } 具体配置可以参见:http://whj0427.javaeye.com/blog/142680或者见Reg_login 也可以参见这里:http://yahaitt.javaeye.com/blog/122720进行非Web运用。 代码见我的资源
[/b]
相关文章推荐
- SpringBoot之旅 -- 定时任务两种(Spring Schedule 与 Quartz 整合 )实现
- Spring定时任务的几种实现 spring框架 quartz spring spring-task 定时任务 注解
- Quartz实现定时任务
- Spring+Quartz实现定时任务的配置方法
- Spring与Quartz的整合实现定时任务调度
- spring boot整合quartz实现多个定时任务
- Spring结合Quartz实现多任务定时调用
- Spring 3整合Quartz 2实现定时任务二:动态添加任务
- spring+quartz实现定时任务(每天零点删除指定文件夹中缓存文件)
- Quartz实现定时任务
- Quartz框架——实现定时任务调度
- Spring整合Quartz实现定时任务
- Spring+Quartz框架实现定时任务(集群,分布式)
- java实现定时任务(Quartz)
- Spring Quartz 实现多任务定时调用
- 基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度
- springmvc中实现quartz定时任务
- Spring 3整合Quartz 2实现定时任务二:动态添加任务
- SpringMvc整合Quartz实现定时任务项目源码
- Spring3.0与Quartz的整合实现定时任务调度