quartz处理定时任务的核心概念

quartz处理定时任务的核心概念

ID:12584659

大小:42.00 KB

页数:5页

时间:2018-07-17

quartz处理定时任务的核心概念_第1页
quartz处理定时任务的核心概念_第2页
quartz处理定时任务的核心概念_第3页
quartz处理定时任务的核心概念_第4页
quartz处理定时任务的核心概念_第5页
资源描述:

《quartz处理定时任务的核心概念》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、核心概念1.Job:Job是任务执行的流程,是一个类2.JobDetail:JobDetail是Job是实例,是一个对象,包含了该实例的执行计划和所需要的数据3.Trigger:Trigger是定时器,决定任务何时执行4.Scheduler:调度器,调度器接受一组JobDetail+Trigger即可安排一个任务,其中一个JobDetail可以关联多个Trigger实例1.初始化:12Scheduler scheduler=StdSchedulerFactory.getDefaultScheduler();scheduler.start();当程序退出时,

2、应该主动调用shutdown()方法关闭该调度器。2.Job:一个Job类需要实现org.quartz.Job接口,这个接口值需要实现一个方法即可:1voidexecute(JobExecutionContextcontext) throwsJobExecutionExceptioncontext是重要的上下文,可以访问到关联的JobDetail对象和本次触发的Trigger对象,以及在此之上设定的数据。3.JobDetail:可以使用JobBuilder来构建一个JobDetail对象:1234567JobDetailjob=JobBuilder.new

3、Job(MyJob.class)//MyJob是我实现的Job类    .withIdentity("myjob")//可以给该JobDetail起一个id,便于之后的检索    .requestRecovery()//执行中应用发生故障,需要重新执行    .storeDurably()//即使没有Trigger关联时,也不需要删除该JobDetail    .usingJobData("key1","value1")    .usingJobData("key2","value2")//以Key-Value形式关联数据    .build();Quar

4、tz因为考虑到有些任务不是幂等的,不可以多次重复执行,所以默认没有开启“requestRecovery”。当确认业务中允许一次任务执行两次的情况下,可以开启该选项,则任务肯定不会因为应用停止而漏调用,但缺点就是,有可能会重复调用。每个JobDetail内都有一个Map,包含了关联到这个Job的数据,在Job类中,可以通过context取出该数据,进行业务流程处理。4.Trigger:可以使用TriggerBuilder来构建一个Trigger对象:12345678Triggertrigger=TriggerBuilder.newTrigger()    .

5、forJob("myjob")//关联上述的JobDetail    .withIdentity("myjob-trigger1")//给该Trigger起一个id    .startAt(DateBuilder.futureDate(20,IntervalUnit.SECOND))//延迟20秒开始    .withSchedule(SimpleScheduleBuilder.repeatMinutelyForever())//每分钟触发一次,无限循环    .usingJobData("key3","value3")    .usingJobData(

6、"key4","value4")//以Key-Value形式关联数据    .build();5.设定:因为上述的Trigger已经关联了JobDetail,可以使用1scheduler.scheduleJob(trigger);把这一组JobDetail和Trigger加载到调度器上,接下来就会按照计划执行Job任务。6.配置文件:配置文件不是必须的,Quartz对配置项都是有默认值的,当需要自定义的时候,可以在classpath路径下放一个quartz.properties文件,Quartz的StdSchedulerFactory在启动时会自动加载该配

7、置文件。比较值得关注的是这两个配置项:12org.quartz.threadPool.threadCount=50org.quartz.scheduler.batchTriggerAcquisitionMaxCount=50第一个配置项是线程池里的线程数,默认值是10,当执行任务会并发执行多个耗时任务时,要根据业务特点选择线程池的大小。第二个配置是,当检查某个Trigger应该触发时,默认每次只Acquire一个Trigger,(为什么要有Acquire的过程呢?是为了防止多线程访问的情况下,同一个Trigger被不同的线程多次触发)。尤其是使用JDBCJ

8、obStore时,一次Acquire就是一个update语句,尽可

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。