2011-10-11 2 views
1

나는 Spring의 in-build 스케줄링 (기본적으로 "5 분마다, 그러나 단지 4 : 00h에서 16:00h 사이")의 기능을 넘어선 스케줄링 알고리즘을 구성 할 필요가있다. org.springframework.scheduling.Trigger 인터페이스를 구현하는 것이 쉬운 방법 인 것처럼 보입니다.Spring 3에서 커스텀 트리거를 어떻게 구성합니까?

내가 이해할 수없는 부분과 the documentation에 답을 얻지 못하는 부분은 다음과 같습니다. 이것이 XML 구성과 어떻게 섞여 있습니까? Quartz 예제를 제외하고는 태스크 네임 스페이스의 요소에서 커스텀 트리거 빈을 지정하는 방법이 없다.

스프링 3 애플리케이션에서 맞춤 트리거를 사용하려면 어떻게해야합니까? Bean XML 설정을 사용하는 것이 이상적입니다.

답변

0

XML을 사용하여 두 개의 표준 트리거를 구성하는 것은 스프링 3.0에서는 불가능합니다. 그러나 3.1M2 릴리스의 새로운 기능으로 추가되었습니다. https://jira.springsource.org/browse/SPR-8205

pointing this out의 Mark Fisher에게 감사드립니다.

+1

어떻게 알았습니까?문서 검색 중 ... – bacar

5

내가 1 년 전에 작성한 DurationTrigger을 살펴보십시오.

<!-- Fire every minute starting at 2:00 PM and ending at 2:05 PM, every day --> 

<task:scheduled-tasks> 
    <task:scheduled ref="simpleProcessor" method="process" cron="0 0-5 14 * * ?"/> 
</task:scheduled-tasks> 

체크 아웃이 JIRA로 : 당신은 CronTrigger/크론 표현을 사용할 수 있습니다, 또는

Trigger trigger = new DurationTrigger(startTime, endTime, period); 
ScheduledFuture task = taskScheduler.schedule(packageDeliveryTask, trigger); 

: 여기

public class DurationTrigger implements Trigger { 

    /** 
    * <p> Create a trigger with the given period, start and end time that define a time window that a task will be 
    *  scheduled within.</p> 
    */ 
    public DurationTrigger(Date startTime, Date endTime, long period) {...} 

    // ... 
} 

는이 트리거와 같은 작업을 예약 할 방법입니다 이 봄 통합만큼이나. article

편집 :

JIRA의 토론에서

, 당신은 봄 통합을 사용하여 위의 DurationTrigger, 또는 그 문제에 대한 다른 사용자 정의 트리거를 구성 할 수 있습니다

<inbound-channel-adapter id="yourChannelAdapter" 
         channel="yourChannel"> 
    <poller trigger="durationTrigger"/> 
</inbound-channel-adapter> 

<beans:bean id="durationTrigger" class="org.gitpod.scheduler.trigger.DurationTrigger"> 
    <beans:constructor-arg value="${start.time}"/> 
    <beans:constructor-arg value="${end.time}"/> 
    <beans:constructor-arg value="${period}"/> 
</beans:bean> 

을이 글은 스프링 통합을 사용하기 매우 간단하여 프로젝트, 계획하지 않은 경우에도. 위의 스케줄링만큼 작게 사용하거나 Spring Integration이 사용할 수있는 많은 다른 엔터프라이즈 통합 패턴에 의존하는만큼 사용할 수 있습니다.

+0

감사합니다. tolitius. 나는 아직도 프로그래밍 방식으로 되풀이 작업을 예약하는 방법을 이해하지 못한다. 여전히 XML 설정 (@cron 속성과 동등한 것이 필요합니다)을 통해 스케줄을 작성할 수 없다는 인상을 받았습니다. 귀하의 게시물 덕분에 실제로 cron 트리거가 실제로 충분하다는 것입니다. 어떻게 든 cron 구문이 간격을 허용한다는 것을 잊었습니다. '0 0/5 4-15 * *?' 내 사용 사례에 잘 작동해야합니다. –

+0

예. 그리고 위의 'cron 표현식'은 실제로 여러분이 찾고있는 XML 설정입니다. – tolitius

+0

cron 표현식에는 한계가 있습니다. 지금 당장 걱정할 것은 없지만 JIRA 티켓에 주석으로 달았습니다. –

관련 문제