我真正想要做的是創建一個不同時運行的Quartz作業,但也可以訪問JobExecutionContext
以獲得previousFireTime
。這是我的目標:如何將數據作爲MethodInvokingJobDetailFactoryBean傳遞給正在運行的方法?
// imports...
public class UtilityObject {
private SomeService someService;
@Autowired
public UtilityObject(SomeService someService) {
this.someService = someService;
}
public void execute(JobExecutionContext ctx) throws JobExecutionException {
Date prevDate = ctx.getPreviousFireTime();
// rest of the code...
}
}
這裏是我如何配置我的豆:與
創建Bean的過程中
<bean name="utilityBean" class="UtilityObject" /> <bean id="utilityJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetOjbect" ref="utilityBean" /> <property name="targetMethod" value="execute" /> <property name="concurrent" value="false" /> </bean> <bean name="utilityTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail" ref="utilityJob" /> <property name="startDelay" value="5000" /> <property name="repeatInterval" value="20000" /> </bean>
當我嘗試運行它,它失敗NoSuchMethodException:UtilityJob.execute()
任何想法?
解決方案:
閱讀skaffman的答案後,我能得到我的解決辦法工作。使用我擁有的觸發器,我知道這個名字是,並且發現默認組是'DEFAULT'。我有我的類擴展QuartzJobBean
類,然後添加這段代碼:
protected void executeInternal(JobExecutionContext ctx)
throws JobExecutionException {
boolean isRunning =
(ctx.getScheduler().getTriggerState("utilityTrigger", "DEFAULT") ==
Trigger.STATE_BLOCKED);
if (isRunning) {
// run the job
}
}
對不起,我奇怪的格式;這些是很長的路線!
感謝。我正在修改我的問題,以包括我在閱讀您的答案後最終達成的答案。 – Pat 2011-04-14 19:36:07