java定时任务Qeartz_第1页
java定时任务Qeartz_第2页
java定时任务Qeartz_第3页
java定时任务Qeartz_第4页
java定时任务Qeartz_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、BATJAVA定时任务之-Quartz使用篇分类: Java专区2011-01-22 16:384595人阅读评论(9)收藏举报 定时任务之-Quartz使用篇 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个, 甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。官方网站: 相关Jar: quartz-all-1.6.0.jar jta.jar commons-logging-1.1.jar commons

2、-collections3.2.jar 经过封装的管理类: javaview plaincopy1 /* 2 * 版权所有:华信软件 3 * 项目名称:公用模块 4 * 创建者: Wangdf 5 * 创建日期: 2011-1-22 6 * 文件说明: 定时任务管理类 7 * 最近修改者:Wangdf 8 * 最近修改日期:2011-1-22 9 */ 10 package com.extjweb.quartz; 11 12 import java.text.ParseException; 13 14 import org.quartz.CronTrigger; 15 import org.q

3、uartz.JobDetail; 16 import org.quartz.Scheduler; 17 import org.quartz.SchedulerException; 18 import org.quartz.SchedulerFactory; 19 import org.quartz.impl.StdSchedulerFactory; 20 21 /* 22 * 定时任务管理类 23 * 24 * author 王德封 25 */ 26 public class QuartzManager 27 private static SchedulerFactory gScheduler

4、Factory = new StdSchedulerFactory(); 28 private static String JOB_GROUP_NAME = "EXTJWEB_JOBGROUP_NAME" 29 private static String TRIGGER_GROUP_NAME = "EXTJWEB_TRIGGERGROUP_NAME" 30 31 /* 32 * 添加一个定时任务,使用默认的任务组名,触发器名,触发器组名 33 * 34 * param jobName 35 * 任务名 36 * param jobClass 37 * 任

5、务 38 * param time 39 * 时间设置,参考quartz说明文档 40 * throws SchedulerException 41 * throws ParseException 42 */ 43 public static void addJob(String jobName, String jobClass, String time) 44 try 45 Scheduler sched = gSchedulerFactory.getScheduler(); 46 JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_

6、NAME, Class.forName(jobClass);/ 任务名,任务组,任务执行类 47 / 触发器 48 CronTrigger trigger = new CronTrigger(jobName, TRIGGER_GROUP_NAME);/ 触发器名,触发器组 49 trigger.setCronExpression(time);/ 触发器时间设定 50 sched.scheduleJob(jobDetail, trigger); 51 / 启动 52 if (!sched.isShutdown() 53 sched.start(); 54 55 catch (Exception

7、e) 56 e.printStackTrace(); 57 throw new RuntimeException(e); 58 59 60 61 /* 62 * 添加一个定时任务 63 * 64 * param jobName 65 * 任务名 66 * param jobGroupName 67 * 任务组名 68 * param triggerName 69 * 触发器名 70 * param triggerGroupName 71 * 触发器组名 72 * param jobClass 73 * 任务 74 * param time 75 * 时间设置,参考quartz说明文档 76 *

8、 throws SchedulerException 77 * throws ParseException 78 */ 79 public static void addJob(String jobName, String jobGroupName, 80 String triggerName, String triggerGroupName, String jobClass, String time) 81 try 82 Scheduler sched = gSchedulerFactory.getScheduler(); 83 JobDetail jobDetail = new JobDe

9、tail(jobName, jobGroupName, Class.forName(jobClass);/ 任务名,任务组,任务执行类 84 / 触发器 85 CronTrigger trigger = new CronTrigger(triggerName, triggerGroupName);/ 触发器名,触发器组 86 trigger.setCronExpression(time);/ 触发器时间设定 87 sched.scheduleJob(jobDetail, trigger); 88 catch (Exception e) 89 e.printStackTrace(); 90 th

10、row new RuntimeException(e); 91 92 93 94 /* 95 * 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名) 96 * 97 * param jobName 98 * param time 99 */ 100 public static void modifyJobTime(String jobName, String time) 101 try 102 Scheduler sched = gSchedulerFactory.getScheduler(); 103 CronTrigger trigger = (CronTrigger) s

11、ched.getTrigger(jobName, TRIGGER_GROUP_NAME); 104 if(trigger = null) 105 return; 106 107 String oldTime = trigger.getCronExpression(); 108 if (!oldTime.equalsIgnoreCase(time) 109 JobDetail jobDetail = sched.getJobDetail(jobName, JOB_GROUP_NAME); 110 Class objJobClass = jobDetail.getJobClass(); 111 S

12、tring jobClass = objJobClass.getName(); 112 removeJob(jobName); 113 114 addJob(jobName, jobClass, time); 115 116 catch (Exception e) 117 e.printStackTrace(); 118 throw new RuntimeException(e); 119 120 121 122 /* 123 * 修改一个任务的触发时间 124 * 125 * param triggerName 126 * param triggerGroupName 127 * param

13、 time 128 */ 129 public static void modifyJobTime(String triggerName, 130 String triggerGroupName, String time) 131 try 132 Scheduler sched = gSchedulerFactory.getScheduler(); 133 CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerName, triggerGroupName); 134 if(trigger = null) 135 return;

14、136 137 String oldTime = trigger.getCronExpression(); 138 if (!oldTime.equalsIgnoreCase(time) 139 CronTrigger ct = (CronTrigger) trigger; 140 / 修改时间 141 ct.setCronExpression(time); 142 / 重启触发器 143 sched.resumeTrigger(triggerName, triggerGroupName); 144 145 catch (Exception e) 146 e.printStackTrace()

15、; 147 throw new RuntimeException(e); 148 149 150 151 /* 152 * 移除一个任务(使用默认的任务组名,触发器名,触发器组名) 153 * 154 * param jobName 155 */ 156 public static void removeJob(String jobName) 157 try 158 Scheduler sched = gSchedulerFactory.getScheduler(); 159 sched.pauseTrigger(jobName, TRIGGER_GROUP_NAME);/ 停止触发器 160

16、 sched.unscheduleJob(jobName, TRIGGER_GROUP_NAME);/ 移除触发器 161 sched.deleteJob(jobName, JOB_GROUP_NAME);/ 删除任务 162 catch (Exception e) 163 e.printStackTrace(); 164 throw new RuntimeException(e); 165 166 167 168 /* 169 * 移除一个任务 170 * 171 * param jobName 172 * param jobGroupName 173 * param triggerName

17、 174 * param triggerGroupName 175 */ 176 public static void removeJob(String jobName, String jobGroupName, 177 String triggerName, String triggerGroupName) 178 try 179 Scheduler sched = gSchedulerFactory.getScheduler(); 180 sched.pauseTrigger(triggerName, triggerGroupName);/ 停止触发器 181 sched.unschedu

18、leJob(triggerName, triggerGroupName);/ 移除触发器 182 sched.deleteJob(jobName, jobGroupName);/ 删除任务 183 catch (Exception e) 184 e.printStackTrace(); 185 throw new RuntimeException(e); 186 187 188 189 /* 190 * 启动所有定时任务 191 */ 192 public static void startJobs() 193 try 194 Scheduler sched = gSchedulerFacto

19、ry.getScheduler(); 195 sched.start(); 196 catch (Exception e) 197 e.printStackTrace(); 198 throw new RuntimeException(e); 199 200 201 202 /* 203 * 关闭所有定时任务 204 */ 205 public static void shutdownJobs() 206 try 207 Scheduler sched = gSchedulerFactory.getScheduler(); 208 if(!sched.isShutdown() 209 sche

20、d.shutdown(); 210 211 catch (Exception e) 212 e.printStackTrace(); 213 throw new RuntimeException(e); 214 215 216 改造Quartz的JobRunShell类的202行代码、使定时任务支持数据库全程事务以及数据库连接的关闭:javaview plaincopy217 / execute the job 218 try 219 log.debug("Calling execute on job " + jobDetail.getFullName(); 220 job

21、.execute(jec); 221 222 / 2011/1/22 王德封 添加 223 DBUmit(); 224 225 endTime = System.currentTimeMillis(); 226 catch (JobExecutionException jee) 227 endTime = System.currentTimeMillis(); 228 jobExEx = jee; 229 230 / 2011/1/22 王德封 添加 231 DBUtil.rollback(); 232 233 getLog().info("Job " + jobDetai

22、l.getFullName() + 234 " threw a JobExecutionException: ", jobExEx); 235 catch (Throwable e) 236 endTime = System.currentTimeMillis(); 237 getLog().error("Job " + jobDetail.getFullName() + 238 " threw an unhandled Exception: ", e); 239 SchedulerException se = new Schedul

23、erException( 240 "Job threw an unhandled exception.", e); 241 se.setErrorCode(SchedulerException.ERR_JOB_EXECUTION_THREW_EXCEPTION); 242 qs.notifySchedulerListenersError("Job (" 243 + jec.getJobDetail().getFullName() 244 + " threw an exception.", se); 245 jobExEx = new

24、JobExecutionException(se, false); 246 jobExEx.setErrorCode(JobExecutionException.ERR_JOB_EXECUTION_THREW_EXCEPTION); 247 248 / 2011/1/22 王德封 添加 249 DBUtil.rollback(); 250 finally 251 / 2011/1/22 王德封 添加 252 DBUtil.closeCurrentConnection(); 253 测试代码:javaview plaincopy254 System.out.println("【系统启动

25、】开始(每1秒输出一次)."); 255 QuartzManager.addJob(job_name, job, "0/1 * * * * ?"); 256 /QuartzManager.addJob(job_name, job, "0 0/3 8-20 ? ? *"); 257 258 Thread.sleep(5000); 259 System.out.println("【修改时间】开始(每2秒输出一次)."); 260 QuartzManager.modifyJobTime(job_name, "10/2 *

26、 * * * ?"); 261 Thread.sleep(6000); 262 System.out.println("【移除定时】开始."); 263 QuartzManager.removeJob(job_name); 264 System.out.println("【移除定时】成功"); 265 266 System.out.println("/n【再次添加定时任务】开始(每10秒输出一次)."); 267 QuartzManager.addJob(job_name, job, "*/10 * * * * ?

27、"); 268 Thread.sleep(60000); 269 System.out.println("【移除定时】开始."); 270 QuartzManager.removeJob(job_name); 271 System.out.println("【移除定时】成功"); java view plaincopy272 package com.extjweb.quartz; 273 274 import java.util.Calendar; 275 276 import org.quartz.Job; 277 import org.qu

28、artz.JobExecutionContext; 278 import org.quartz.JobExecutionException; 279 280 public class TestJob implements Job 281 282 SuppressWarnings("deprecation") 283 public void execute(JobExecutionContext arg0) throws JobExecutionException 284 System.out.println(Calendar.getInstance().getTime().

29、toLocaleString()+ ""); 285 286 287 quartz 时间配置规则格式: 秒 分 小时 日 月 周 年 序号说明 是否必填 允许填写的值允许的通配符 1 秒 是 0-59 , - * / 2 分 是 0-59 , - * / 3小时 是 0-23 , - * / 4 日 是 1-31 , - * ? / L W 5 月 是 1-12 or JAN-DEC , - * / 6 周 是 1-7 or SUN-SAT , - * ? / L # 7 年 否 empty 或 1970-2099 , - * /通配符说明:* 表示所有值. 例如:在分的字

30、段上设置 "*",表示每一分钟都会触发。? 表示不指定值。使用的场景为不需要关心当前设置这个字段的值。例如:要在每月的10号触发一个操作,但不关心是周几,所以需要周位置的那个字段设置为"?" 具体设置为 0 0 0 10 * ?- 表示区间。例如 在小时上设置 "10-12",表示 10,11,12点都会触发。, 表示指定多个值,例如在周字段上设置 "MON,WED,FRI" 表示周一,周三和周五触发/ 用于递增触发。如在秒上面设置"5/15" 表示从5秒开始,每增15秒触发(5,20,35,5

31、0)。在月字段上设置'1/3'所示每月1号开始,每隔三天触发一次。L 表示最后的意思。在日字段设置上,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年leap), 在周字段上表示星期六,相当于"7"或"SAT"。如果在"L"前加上数字,则表示该数据的最后一个。例如在周字段上设置"6L"这样的格式,则表示“本 月最后一个星期五"W 表示离指定日期的最近那个工作日(周一至周五). 例如在日字段上设置"15W",表示离每月15号最近的那个工作日触发。如果15号正好是周六,则找最近

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论