无需下载直接进入的网站的代码,百度深圳总部,证书查询入口官网,wordpress调用指定文章图片1.介绍
在Quartz执行任务的过程中总是伴随着trigger的状态的改变#xff0c;当trigger的状态变为error时#xff0c;这个trigger就永远不会再被触发了#xff0c;不管是不是还没到endTime。
2.trigger状态变为error的情况
2.1在triggeredTrigger时
在Quartz执行逻辑当trigger的状态变为error时这个trigger就永远不会再被触发了不管是不是还没到endTime。
2.trigger状态变为error的情况
2.1在triggeredTrigger时
在Quartz执行逻辑一中说到Quartz在获取到next triggers之后尚未触发在差不多到时间了之后才去triggered这些triggers自然此时就需要去获取这些trigger对应的job的信息调用的是JobStoreSupport中的retrieveJob方法如下 可以看到如果job类找不到会抛一个class not found的异常向上查看调用可以看到在triggedTrigger方法中有对其处理 可以看到对retrieveJob方法做了异常的catch处理catch到JobPersistenceException后会调用updateTriggerState方法把trigger的状态置为error。
2.2初始化JobRunShell实例时 从代码中可以很直观的看出来在创建JobRunShell实例的过程中抛出异常也会导致trigger的状态被置为error。
2.3执行任务时
在Quartz执行逻辑一中说到了最后创建的JobRunShell实例是交由线程池去执行的如果执行失败则trigger的状态也会被置为error 从注释也不难看出这种情况出现的原因是什么。
2.4任务执行结束之后
从2.2创建JobRunShell实例出错调用的改变trigger状态的方法triggeredJobComplete不难看出任务执行结束后会根据job执行的结果code去更新trigger的state的时候有几率把状态更新为error。关于这部分的逻辑在Quartz执行逻辑一中有说明下面看一下triggeredJobComplete方法中哪些情况会把trigger的state更新为error 从代码中不难看出当结果code为SET_TRIGGER_ERROR或SET_ALL_JOB_TRIGGERS_ERROR时会把触发器的状态置为ERROR。那么这个intCode是怎么来的呢在JobRunShell的run方法中可以看到 是通过trigger的executionComplete方法得到的该方法里的逻辑比较简单都是if-else有必要的可以自己看一下。