次の Spring XML 構成で Quartz ジョブを作成しています。
<bean class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<bean class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="name" value="The job"/>
<property name="group" value="The group"/>
<property name="jobClass" value="com.example.myapp.MorningJob"/>
<property name="jobDataMap">
<util:map>
<entry key="key1"
value="val1"/>
<entry key="key2"
value="val2"/>
</util:map>
</property>
</bean>
</property>
<property name="cronExpression" value="0 0 6 * * ? *"/>
<property name="misfireInstruction"
value="#{T(org.quartz.CronTrigger).MISFIRE_INSTRUCTION_FIRE_ONCE_NOW}"/>
<property name="timeZone" ref="timezone"/>
</bean>
私の仕事はこんな感じ
@Configurable
@DisallowConcurrentExecution
@PersistJobDataAfterExecution
public class MorningJob implements Job { ... }
ただし、ミスファイア命令セットはまったく効果がありません。長いアプリのダウンタイムの後、トリガーが複数回失敗すると、Quartz は何度もジョブを開始しようとします。
私がチェックしようとしたときcontext.getTrigger().getMisfireInstruction()
、MorningJob.execute()
それは0を与えますCronTrigger.MISFIRE_INSTRUCTION_FIRE_ONCE_NOW
が、1です.
失火命令が設定されていない理由はありますか?