Quartz에서 발견 한 해결책은 방아쇠를 한 시간 간격으로 되돌려 놓고 다음 발사 시간을 계산하는 것입니다. 모든 트리거를 반복함으로써 트리거가 과거에 발사 한 가장 최근의 시간을 결정할 수 있습니다.
각 발사 사이의 간격 계산 :
Date nextFireTime = trigger.getNextFireTime();
Date subsequentFireTime = trigger.getFireTimeAfter(nextFireTime);
long interval = subsequentFireTime.getTime() - nextFireTime.getTime();
과거에 간격 때까지 한 번에 다음 발사 시간을 찾기 :
Date previousPeriodTime = new Date(System.currentTimeMillis() - interval);
Date previousFireTime = trigger.getFireTimeAfter(previousPeriodTime);
난 당신이 사용하는 경우 것으로 나타났습니다 CronTrigger
이렇게하면 과거에 화재 시간을 묻지 않게됩니다. 트리거의 모든 통해
Date originalStartTime = trigger.getStartTime(); // save the start time
Date previousPeriodTime = new Date(originalStartTime.getTime() - interval);
trigger.setStartTime(previousPeriodTime);
Date previousFireTime = trigger.getFireTimeAfter(previousPeriodTime);
trigger.setStartTime(originalStartTime); // reset the start time to be nice
반복 처리를 과거에 가장 최근 인 하나 찾을 :이 문제를 해결하기 위해 나는 위의 코드가 될 수 있도록, 시작 시간을 변경 나 '
for (String groupName : scheduler.getTriggerGroupNames()) {
for (String triggerName : scheduler.getTriggerNames(groupName)) {
Trigger trigger = scheduler.getTrigger(triggerName, groupName);
// code as detailed above...
interval = ...
previousFireTime = ...
}
}
을 이것을 헬퍼 메소드 나 클래스로 리팩터링하기 위해 독자에게 연습 문제로 남겨 둡니다. 실제로 서브 클래 싱 된 위임 트리거에서 위의 알고리즘을 사용하여 이전 발사 시간순으로 정렬 된 집합에 배치합니다.https://github.com/devbhuwan/cron-micro-utils
안녕하세요. Stephen, 보내 주신 의견에 감사드립니다. 내 문제를 해결하기 위해 내 질문에 메모에 조금 더 많은 정보를 추가했습니다. –