已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Spring-简单使用quartz实现定时作业关键字: spring quartz 定时批处理作业是J2EE企业应用里很重要的一环,用来在晚间进行财务挂账,数据转存,新闻联播等等操作。 而在Spring里,已经很好的集成了Quartz,简单到像配cron一样,在xml文件里面配一下时间就可以自动执行,不需要写一行代码。Spring对Quartz大刀阔斧的简化堪称范例,Quartz项目组也许可以学习一下。 confirmOrder 0 0 6,12,20 * * ? 上面这段配置文件规定了在早上6点和晚上8点执行financeDAO对象的confirmOrder()方法. 附:cronExpression配置说明 字段 允许值 允许的特殊字符 秒 0-59 , - * / 分 0-59 , - * / 小时 0-23 , - * / 日期 1-31 , - * ? / L W C 月份 1-12 或者 JAN-DEC , - * / 星期 1-7 或者 SUN-SAT , - * ? / L C # 年(可选) 留空, 1970-2099 , - * /QUARTZ定时任务学习(一)简单任务 学习quartz首先了解三个概念:调度器:负责调度作业和触发器;触发器:设置作业执行的时间、参数、条件等;(简单触发器和Cron触发器)作业:定时任务内容,被执行的程序;下载必要的jar包,直接去官网下载,将quartz-x.x.x.jar 和core 和/或 optional 文件夹中的 jar 文件放在项目的文件夹或项目的类路径中Quartz的几个核心的接口和类为:Job接口:自己写的“定时程序”实现此接口的void execute(JobExecutionContext arg0)方法,Job还有一类为有状态的StatefulJob接口,如果我们需要在上一个作业执行完后,根据其执行结果再进行下次作业的执行,则需要实现此接口。Trigger抽象类:调度类(Scheduler)在时间到时调用此类,再由trigger类调用指定的定时程序。Quertz中提供了两类触发器为:SimpleTrigger,CronTrigger。前者用于实现比较简单的定时功能,例如几点开始,几点结束,隔多长时间执行,共执行多少次等,后者提供了使用表达式来描述定时功能,因此适用于比较复杂的定时描述,例如每个月的最后一个周五,每周的周四等。JobDetail类:具体某个定时程序的详细描述,包括Name,Group,JobDataMap等。JobExecutionContext类:定时程序执行的run-time的上下文环境,用于得到当前执行的Job的名字,配置的参数等。JobDataMap类:用于描述一个作业的参数,参数可以为任何基本类型例如String,float等,也可为某个对象的引用.JobListener,TriggerListener接口:用于监听触发器状态和作业扫行状态,在特写状态执行相应操作。JobStore类:在哪里执行定进程序,可选的有在内存中,在数据库中。开始:边看例题边学习,首先从简单触发器开始1、作业通过实现 org.quartz.job 接口,可以使 Java 类变成可执行的。这个类用一条非常简单的输出语句覆盖了 execute(JobExecutionContext context) 方法。import java.util.Date;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;public class SimpleQuartzJob implements Job public SimpleQuartzJob() public void execute(JobExecutionContext context) throws JobExecutionException System.out.println(In SimpleQuartzJob - executing its JOB at + new Date() + by + context.getTrigger().getName(); 2、触发器和调度器public void task() throws SchedulerException /通过SchedulerFactory来获取一个调度器 SchedulerFactory schedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = schedulerFactory.getScheduler(); /引进作业程序 JobDetail jobDetail = new JobDetail(jobDetail-s1, jobDetailGroup-s1, SimpleQuartzJob.class); /new一个触发器 SimpleTrigger simpleTrigger = new SimpleTrigger(simpleTrigger, triggerGroup-s1); /设置作业启动时间 long ctime = System.currentTimeMillis(); simpleTrigger.setStartTime(new Date(ctime); /设置作业执行间隔 simpleTrigger.setRepeatInterval(10000); /设置作业执行次数 simpleTrigger.setRepeatCount(10); /设置作业执行优先级默认为5 /simpleTrigger.setPriority(10); /作业和触发器设置到调度器中 scheduler.scheduleJob(jobDetail, simpleTrigger); /启动调度器 scheduler.start(); 一个简单的quartz任务就完成了什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什么任务,但任务的定时是不确定的(是由客户制定)。 这样总不能修改配置文件每定制个定时任务就增加一个trigger吧,即便允许客户修改配置文件,但总需要重新启动web服务啊,研究了下Quartz在Spring中的动态定时,发现 0/10 * * * * ? 中cronExpression是关键,如果可以动态设置cronExpression的值,也就说如果我们可以直接调用CronTriggerBean中设置cronExpression的方法,就可以顺利解决问题了。 熟悉1的朋友可以跳过不看,下面2、3是动态定时任务的具体实现。 1 Quartz 在Spring中的简单配置 Spring 配置文件: 0/10 * * * * ? 在上面的配置中设定了 targetMethod: 指定需要定时执行scheduleInfoAction中的simpleJobTest()方法 concurrent:对于相同的JobDetail,当指定多个Trigger时, 很可能第一个job完成之前,第二个job就开始了。指定concurrent设为false,多个job不会并发运行,第二个job将不会在第一个job完成之前开始。 cronExpression:0/10 * * * * ?表示每10秒执行一次,具体可参考附表。 triggers:通过再添加其他的ref元素可在list中放置多个触发器。 scheduleInfoAction 中的simpleJobTest()方法 注意:此方法没有参数,如果scheduleInfoAction有两个方法simpleJobTest()和simpleJobTest(String argument),则spring只会去执行无参的simpleJobTest(). public void simpleJobTest() log.warn(uh oh, Job is scheduled ! + Success.); 2011-02-12spring整合quartz实现定时任务实例-学习文章分类:Java编程 文章分类:Java编程 使用spring整合quartz实现定时执行任务,是很简单的事,大体需要几个步骤: 1:定义job,即要在项目定时执行的业务逻辑(定时同步数据库,定时汇总数据。) a:一个继承QuartzJobBean了的类 b:普通的业务逻辑类 2:定义trigger,即触发规则(两种方式) a:设定间隔时间执行 b:指定具体的时间执行 年 月 日 时 分 秒 (反向定义) 3:定义任务调度 后两步都是在spring中配置完成的 小例子: Job1: Java代码 1. package com.tigerlee.schedule.demo; 2. 3. import org.quartz.JobExecutionContext; 4. import org.quartz.JobExecutionException; 5. import org.springframework.scheduling.quartz.QuartzJobBean; 6. 7. /* 8. * 9. * author TigerLee 10. * date Oct 20, 2010 11. * desc 通过监听继承了类QuartzJobBean的类来实现定时任务 12. */ 13. public class HandleReporterJob extends QuartzJobBean 14. /这个属性可以通过spring配置传递过值 15. public String jobName; 16. 17. Override 18. protected void executeInternal(JobExecutionContext arg0) 19. throws JobExecutionException 20. 21. System.out.println(报表:+getJobName()+开始执行.); 22. /处理报表的实际业务逻辑 23. 24. 25. 26. public String getJobName() 27. return jobName; 28. 29. 30. public void setJobName(String jobName) 31. this.jobName = jobName; 32. 33. 34. 35. 36. 37. 38. package com.tigerlee.schedule.demo; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; /* * * author TigerLee * date Oct 20, 2010 * desc 通过监听继承了类QuartzJobBean的类来实现定时任务 */ public class HandleReporterJob extends QuartzJobBean /这个属性可以通过spring配置传递过值 public String jobName; Override protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException System.out.println(报表:+getJobName()+开始执行.); /处理报表的实际业务逻辑 public String getJobName() return jobName; public void setJobName(String jobName) this.jobName = jobName; Job2: Java代码 1. package com.tigerlee.schedule.demo; 2. /* 3. * 4. * author TigerLee 5. * date Oct 20, 2010 6. * desc 执行定时任务的业务逻辑 7. */ 8. public class HandleDBJob 9. /* 10. * 要定时执行的业务逻辑 11. */ 12. public void handleDB() 13. System.out.println(开始处理数据库.); 14. 15. 16. 17. package com.tigerlee.schedule.demo; /* * * author TigerLee * date Oct 20, 2010 * desc 执行定时任务的业务逻辑 */ public class HandleDBJob /* * 要定时执行的业务逻辑 */ public void handleDB() System.out.println(开始处理数据库.); spring 配置文件: Java代码 1. 2. 9. 10. 12. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 27. 28. 29. 30. 31. 32. 33. 34. 35. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 48. 49. 50. 51. 52. 53. 54. 55. 57. 58. 59. 60. 61. 62. 63. 64. 65. 测试启动容器类: Java代码 1. package com.tigerlee.schedule.demo; 2. 3. import org.springframework.context.ApplicationContext; 4. import org.springframework.context.support.ClassPathXmlApplicationContext; 5. 6. public class Test 7. 8. public static void main(String args) 9. 10. ApplicationContext context = new ClassPathXmlApplicationContext(applicationContext.xml); 11. 12. 13. 14. package com.tigerlee.schedule.demo; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test public static void main(String args) ApplicationContext context = new ClassPathXmlApplicationContext(applicationContext.xml); 附上具体时间的定义规则: Java代码 1. 0 0 12 * * ?-在每天中午12:00触发 2. 0 15 10 ? * *-每天上午10:15 触发 3. 0 15 10 * * ?-每天上午10:15 触发 4. 0 15 10 * * ? *-每天上午10:15 触发 5. 0 15 10 * * ? 2005-在2005年中的每天上午10:15 触发 6. 0 * 14 * * ?-每天在下午2:00至2:59之间每分钟触发一次 7. 0 0/5 14 * * ?-每天在下午2:00至2:59之间每5分钟触发一次 8. 0 0/5 14,18 * * ?-每天在下午2:00至2:59和6:00至6:59之
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 4623-2025环形混凝土电杆
- 2025年初级经济师之初级建筑与房地产经济过关检测试卷B卷附答案
- 2020-2025年高级经济师之工商管理每日一练试卷A卷含答案
- 《制造执行系统实施与应用》 课件 3.2生产优化调度技术
- 大疱性表皮松解症的护理
- 雨课堂学堂在线学堂云《病理生理学(贵州医大 )》单元测试考核答案
- 2025湖南省社会科学院(湖南省人民政府发展研究中心)第二批高层次人才招聘3人参考题库带答案解析
- 2026年机械员之机械员专业管理实务考试题库200道含完整答案(易错题)
- 2026建研院检测中心有限公司校园招聘12人历年真题汇编及答案解析(夺冠)
- 洪雅县关于2025年从服务基层项目等人员中考核招聘乡镇事业单位工作人员历年真题汇编带答案解析
- 深圳市龙华区招聘社区网格员考试真题2024
- 服务器租赁合同协议
- 产康合作协议书合同
- 2025年衢州市属国企公开招聘工作人员笔试参考题库附带答案详解
- 编制园区规划合同范本
- 2025年及未来5年中国束腰巾市场深度分析及投资战略咨询报告
- 2025年大学《世界史-世界古代史》考试备考题库及答案解析
- 2026年莱商银行校园招聘考试笔试参考题库附答案解析
- 百年孤独读书分享
- 2025河北石家庄市市属国有企业招聘管理及专业技术岗位人员465人笔试考试参考试题附答案解析
- 小学二年级上册书法教案及反思
评论
0/150
提交评论