Что я действительно пытаюсь сделать, так это создать задание Quartz, которое не запускается одновременно, но также может получить доступ к JobExecutionContext
, чтобы получить previousFireTime
.Вот мой объект:
// 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>
Когда я пытаюсь запустить это, он завершается неудачно во время создания bean-компонента с
NoSuchMethodException: UtilityJob.execute ()
Есть идеи?
Решение :
После прочтения ответа СкаффманаЯ смог заставить свое решение работать.Используя триггер, который я имел, я знал, что имя было, и понял, что группа по умолчанию была «ПО УМОЛЧАНИЮ».Мой класс расширил класс QuartzJobBean
, а затем добавил этот фрагмент кода:
protected void executeInternal(JobExecutionContext ctx)
throws JobExecutionException {
boolean isRunning =
(ctx.getScheduler().getTriggerState("utilityTrigger", "DEFAULT") ==
Trigger.STATE_BLOCKED);
if (isRunning) {
// run the job
}
}
Извините за странное форматирование;это несколько длинных очередей!