Quartz定时器使用

转自:http://blog.csdn.net/kuyuyingzi/article/details/18607887


  在项目中很多地方会用到定时器,列如:每天完善0点关闭服务或收集今天的运行数据进行统计。

   Quartz定时器是一个简单、功能比较完善的定时器,它的强大之处它可以配置定时表达式,使定时时间点非常灵活,下面是我个人的使用案例:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. package cn.test;  
  2.   
  3. import static org.quartz.CronScheduleBuilder.cronSchedule;  
  4. import static org.quartz.JobBuilder.newJob;  
  5. import static org.quartz.TriggerBuilder.newTrigger;  
  6. import itour.cn.utils.ConfiUtil;  
  7.   
  8. import org.apache.commons.configuration.Configuration;  
  9. import org.quartz.CronTrigger;  
  10. import org.quartz.Job;  
  11. import org.quartz.JobDetail;  
  12. import org.quartz.JobExecutionContext;  
  13. import org.quartz.JobExecutionException;  
  14. import org.quartz.Scheduler;  
  15. import org.quartz.SchedulerException;  
  16. import org.quartz.SchedulerFactory;  
  17. import org.quartz.impl.StdSchedulerFactory;  
  18. import org.slf4j.Logger;  
  19. import org.slf4j.LoggerFactory;  
  20.   
  21. public class QTaxQuartz implements Job {  
  22.   
  23.     private static Logger log = LoggerFactory.getLogger(QTaxQuartz.class);  
  24.     private static SchedulerFactory sf = new StdSchedulerFactory();  
  25.     private String qtaxTime = null;  
  26.     public QTaxQuartz() {  
  27.         //触发时间可配置,更多示例参考下表Cron表达式  
  28.         Configuration config = ConfiUtil.getConfig();  
  29.         if (config != null) {  
  30.             this.qtaxTime = "0 0 2 * * ?";//config.getString("QtaxTime");  
  31.         } else {  
  32.             log.warn("QTaxQuartz 初始化失败,请检查配置文件!");  
  33.         }  
  34.     }  
  35.       
  36.       
  37.     @Override  
  38.     public void execute(JobExecutionContext context) throws JobExecutionException {  
  39.         startQtax();  
  40.     }  
  41.   
  42.     //start Qtax  
  43.     public void startQtax() {  
  44.         try{  
  45.             //写业务代码  
  46.         }catch(Exception e){  
  47.             log.error(e.getMessage(),e);  
  48.         }  
  49.     }  
  50.   
  51.     //QtaxJob:任务名,QtaxGroup:任务组  
  52.     //QtaxTrigger:触发器名 TQtaxGroup:触发器组名  
  53.     public void initialQuartz() {  
  54.         try {  
  55.             Scheduler sched = sf.getScheduler();  
  56.             JobDetail job = newJob(QTaxQuartz.class).withIdentity("QtaxJob""QtaxGroup").build();  
  57.   
  58.             CronTrigger trigger = newTrigger().withIdentity("QtaxTrigger""TQtaxGroup").withSchedule(cronSchedule(qtaxTime)).build();  
  59.             sched.scheduleJob(job, trigger);  
  60.             if (!sched.isStarted()) {  
  61.                 log.info("QTaxQuartz initialQuartz start");  
  62.                 sched.start();  
  63.             } else  
  64.                 log.info("QTaxQuartz initialQuartz started");  
  65.   
  66.         } catch (SchedulerException e) {  
  67.             log.error("QTaxQuartz initialQuartz start failed!!!");  
  68.         }  
  69.     }  
  70.   
  71.     public void destory() {  
  72.         try {  
  73.             Scheduler sched = sf.getScheduler();  
  74.             if (!sched.isShutdown())  
  75.                 sched.shutdown();  
  76.             log.info("Quartz destory!");  
  77.         } catch (Exception e) {  
  78.             log.error("QTaxQuartz destory stop failed!!!");  
  79.         }  
  80.     }  
  81.   
  82. }  

Cron表示式示例

表示式

说明

"0 0 12 * * ? "

每天12点运行

"0 15 10 ? * *"

每天10:15运行

"0 15 10 * * ?"

每天10:15运行

"0 15 10 * * ? *"

每天10:15运行

"0 15 10 * * ? 2008"

2008年的每天1015运行

"0 * 14 * * ?"

每天14点到15点之间每分钟运行一次,开始于14:00,结束于14:59

"0 0/5 14 * * ?"

每天14点到15点每5分钟运行一次,开始于14:00,结束于14:55

"0 0/5 14,18 * * ?"

每天14点到15点每5分钟运行一次,此外每天18点到19点每5钟也运行一次。

"0 0-5 14 * * ?"

每天14:00点到14:05,每分钟运行一次。

"0 10,44 14 ? 3 WED"

3月每周三的14:10分到14:44,每分钟运行一次。

"0 15 10 ? * MON-FRI"

每周一,二,三,四,五的10:15分运行。

"0 15 10 15 * ?"

每月1510:15分运行。

"0 15 10 L * ?"

每月最后一天10:15分运行。

"0 15 10 ? * 6L"

每月最后一个星期五10:15分运行。

"0 15 10 ? * 6L 2007-2009"

2007,2008,2009年每个月的最后一个星期五的10:15分运行。

"0 15 10 ? * 6#3"

每月第三个星期五的10:15分运行。

定时器一般还与容器监听器配合使用,容器启动时开始定时器,关闭是停止定时器

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. package cn.test;  
  2.   
  3. import itour.cn.fare.gateway.QTaxQuartz;  
  4.   
  5. import javax.servlet.ServletContextEvent;  
  6. import javax.servlet.ServletContextListener;  
  7.   
  8.   
  9. public class CrashController implements ServletContextListener {  
  10.   
  11.     QTaxQuartz qTax = new QTaxQuartz();//Q税定时器控制  
  12.     public void contextInitialized(ServletContextEvent event) {  
  13.           
  14.         //定时Q税开启  
  15.         qTax.initialQuartz();  
  16.           
  17.     }  
  18.   
  19.     public void contextDestroyed(ServletContextEvent event) {  
  20.           
  21.         //宕机时,销毁Q税定时器  
  22.         qTax.destory();  
  23.     }  
  24.   
  25. }  

注意在web.xml中加上配置:

<listener>
        <listener-class>itour.cn.fare.gateway.service.CrashController</listener-class>
   </listener>


   有关quartz的使用,更多内容:http://wenku.baidu.com/view/2a0ae0c9f90f76c660371a1c.html



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值