quartz_学习笔记

上传人:第*** 文档编号:32817821 上传时间:2018-02-12 格式:DOC 页数:10 大小:64.50KB
返回 下载 相关 举报
quartz_学习笔记_第1页
第1页 / 共10页
quartz_学习笔记_第2页
第2页 / 共10页
quartz_学习笔记_第3页
第3页 / 共10页
quartz_学习笔记_第4页
第4页 / 共10页
quartz_学习笔记_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《quartz_学习笔记》由会员分享,可在线阅读,更多相关《quartz_学习笔记(10页珍藏版)》请在金锄头文库上搜索。

1、Quartz 项目应用笔记 Quartz 是一个强大的企业级 Schedule 工具,也是目前最好的开源 Schedule 工具,最近因为项目的需要,简单的用到了 Quartz 的一些功能,对项目中使用 Quartz 的一些问题做简单的记录。在 Quartz 的应用中,我们用到了以下的一些东西,ScheduleFactory, Scheduler, Job, JobDetail, Trigger,简单说明一下他们的用途。SchedulerFactory 是 Scheduler 的工厂,我们可以从中获得受工厂管理的 Scheduler 对象。SchedulerFactory scheduleFa

2、ctory = new StdSchedulerFactory();Scheduler scheduler = scheduleFactory.getScheduler();Scheduler 是一个计划集,其中可以包含多个 JobDetail 和 Trigger 组成的计划任务。我们可以从 SchedulerFactory 中取得 Scheduler。接口 Job 是每个业务上需要执行的任务需要实现的接口,该接口只有一个方法:public interface Job public void execute(JobExecutionContext context)throws JobExecu

3、tionException;我们可以在里面定义我们的 Job 执行逻辑,比如清除过期数据,更新缓存等。JobDetail 描述了一个任务具体的信息,比如名称,组名等等。JobDetail jobDetail = new JobDetail(SayHelloWorldJob, Scheduler.DEFAULT_GROUP, SayHelloWorldJob.class);在上面的构造方法中,第一个是任务的名称,第二个是组名,第三个就是实际当任务需要执行的回调类。Trigger 顾名思义就是触发器,Quartz 有个很好的想法就是分离了任务和任务执行的条件。Trigger 就是控制任务执行条件的

4、类,当 Trigger 认为执行条件满足的时刻,Trigger 会通知相关的 Job 去执行。分离的好处是:1.你可以为某个 Job 关联多个 Trigger,其中任何一个条件满足都可以触发 job 执行,这样可以完成一些组合的高级触发条件2.当 Trigger 失效后(比如:一个永远都不能满足的条件) ,你不必去声明一个新的 job,代替的是你可以为 job 关联一个新的 Trigger 让 job 可以继续执行。目前的 Quartz 实现中,存在两种 Trigger,SimpleTrigger 和 CronTrigger,SimpleTrigger 用来完成一些比如固定时间执行的任务,比如

5、:从现在开始 1 分钟后等等;而 CronTrigger(没错,和 unix 的 cron 进程的含意一样)用来执行 calendar-like 的任务,比如:每周五下午 3:00,每月最后一天等等。在我们项目中,都是一些固定时间的 Job,所以只用到了 SimpleTrigger。Trigger trigger = new SimpleTrigger(SayHelloWorldJobTrigger,Scheduler.DEFAULT_GROUP,new Date(),null,0,0L);这个构造方法中,第一个是 Trigger 的名称,第二个是 Trigger 的组名,第三个是任务开始时间

6、,第四个是结束时间,第五个是重复次数(使用SimpleTrigger.REPEAT_INDEFINITELY 常量表示无限次) ,最后一个是重复周期(单位是毫秒) ,那么这样就创建了一个立刻并只执行一次的任务。但我们定义好了 JobDetail,Job,和 Trigger 后,就可以开始 Schedule 一个 Job 了。scheduler.scheduleJob(jobDetail, trigger);这条语句就是把 job 和 Trigger 关联,这样当 Trigger 认为应该触发的时候就会调用(实际上是 Scheduler 调用)job.execute 方法了。scheduler.

7、start();千万别忘了加上上面的语句,这条语句通知 Quartz 使安排的计划生效。关于 execute 方法的参数 JobExecutionContextJobExecutionContext 就和很多 Context 结尾的类功能一样,提供的运行时刻的上下文环境,JobExecutionContext 中有 Scheduler,JobDetail,Trigger 等很多对象的引用,从而当你在execute 方法内部须需要这些对象的时刻提供的便利。在项目中,我们把需要执行的 Job 相对应的一些信息放在 JobExecutionContext 中,在 Job 执行的时候可以调用。jobD

8、etail.getJobDataMap().put(userid, id);在 Job 中,我们可以拿到相关的 Context 信息:jobExecutionContext.getJobDetail().getJobDataMap().getInt(userid);JobDetail 和 Trigger 的 name 和 groupScheduler 实例对应了很多 job 和 trigger 的实例,为了方便的区分,Quartz 使用 name 和group 这两个特性,正如你想向的一样,同一个 group 下不能有两个相同 name 的JobDetail,Trigger 同理,同一个 Sc

9、heduler 下不能有两个相同 group 的 JobDetail,Trigger 同理,JobDetail 和 Trigger 的完全限定名为:group + name为了让服务器重启以后,我们的 Scheduler 信息仍然不丢失,我们通常采用数据库持久化 Scheduler 的信息。DBScript 在 Quartz 的下载包中的: quartz-1.6.0docsdbTables 下,选择自己使用的 DB 相应的 Script 导入数据库就可以了。在应用中,我们需要配置一个 quartz.properties 才能正常使用 DB。我们可以在 quartz-1.6.0examplese

10、xample10 中找到该文件的样例,稍作一些修改,就可以放到自己项目源码的根目录下使用了。设置 org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX 即可启用基于 JDBC 的 Quartz 信息持久化。根据项目情况设置以下配置信息:org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTXorg.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.Std

11、JDBCDelegateorg.quartz.jobStore.useProperties = falseorg.quartz.jobStore.dataSource = myDSorg.quartz.jobStore.tablePrefix = QRTZ_org.quartz.jobStore.isClustered = falseorg.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driverorg.quartz.dataSource.myDS.URL = jdbc:mysql:/localhost:3306/myapplicationor

12、g.quartz.dataSource.myDS.user = rootorg.quartz.dataSource.myDS.password =org.quartz.dataSource.myDS.maxConnections = 5但是光设置了 Database 不够,我们还需要在 Application 启动的时候自动启动 Scheduler 才行,我们只需要简单的写一个 Servlet 的 Listener 并在 web.xml 中声明该 Listener ,在 Servlet 容易启动的时候,Scheduler 就开始自动执行。public class ScheduleStartLi

13、stener implements ServletContextListener public void contextInitialized(ServletContextEvent servletContextEvent) try scheduleFactory.getScheduler().start(); catch (SchedulerException e) / write logpublic void contextDestroyed(ServletContextEvent servletContextEvent) try scheduleFactory.getScheduler(

14、).shutdown(); catch (SchedulerException e) / write log在 web.xml 里面加入以下配置: org.agilejava.scheduler.ScheduleStartListener以上简单的记录了在项目中关于 Quartz 的一些应用,如果有什么新的使用心得,会在后面继续加入的。对 quartz 的总结 关键字: Spring spring quartz 学习心得 Quartz 是一个强大的企业级 Schedule 工具,也是目前最好的开源 Schedule 工具。Spring中也集成了 quartz 的应用,下面就讲一下如何在 spr

15、ing 中使用 quartz。spring 的配置:xml 代码1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 1000 21. 22. 23. 3000 24. 25. 26. 27. 28. 29. 30. 31. 0 0 */1 * * ? 32. 33. 34. Job:org.quartz.Job 是一个接口,只定义了 void execute(JobExecutionContext context)throws JobExecutionException;一个方法。当定时任务被触发后,系统

16、会自动调用实现了该接口的方法。在 spring 中,org.springframework.scheduling.quartz.QuartzJobBean 对其进行了封装,使用了 Template Method 模式。主要是为了在使用 jobDataMap 时更加方便。QuartzJobBean有两个方法,public final void execute(JobExecutionContext context) throws JobExecutionExceptionJob 接口中定义的,spring 在该方法里进行了些处理,将 jobDataMap 中的值注入到该 Job的实现者中protected abstract void executeInternal(Job

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 工程造价

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号