2016-07-02 13 views
1

꽤 일반적인 스프링 부트 (1.3.5) 응용 프로그램이 있습니다.스프링 부트, 예약 된 작업, 이중 호출

기본 응용 프로그램 진입 점에 시도 @EnableScheduling (그리고 @Configuration 주석 클래스 사용 예약. @Scheduled 방법 (단순 fixedDelay 일정을 간단한 클래스를 만든

).

예약 된 작업을 두 번 실행 (항상) .

지금까지 수집 한 것과

, 두 개의 컨텍스트 두 번 내 콩을 따기 thusly 히로드 및되고 아마도 때문이다. 나는 수정 /이 더블 execu을 방지 어떻게 그래서 좋아. 모든 설정은 기본적으로 숨겨진 봄 부팅 마법이기 때문에?

프레임 워크 버전 :

  • 봄 부팅 1.3.5
  • 봄 클라우드 척 SR1

주요 응용 프로그램 :

내 작업 클래스 (HookCreateRequest리스트에 끌어
@SpringBootApplication 
    @EnableDiscoveryClient 
    @EnableAsync 
    @EnableCircuitBreaker 
    public class AlertsApplication { 

    public static void main(final String[] args) { 
     SpringApplication.run(AlertsApplication.class, args); 
    } 
} 

application.yml에서 - 나는 현재 관련성이 있다고 생각하지 않는다. 필요한 경우 제공 가능) :

@ConditionalOnProperty(name = "init.runner", havingValue = "InitRunner") 
@ConfigurationProperties(prefix = "webhook") 
public class InitRunner /*implements CommandLineRunner*/ { 

    private final List<HookCreateRequest> receivers = new ArrayList<>(); 

    @Autowired 
    private WebHookService hookService; 

    @Scheduled (fixedRate = 300000) 
    public void run() throws Exception { 

     getReceivers().stream().forEach(item -> { 
      log.debug("Request : {}", item); 
      hookService.create(item); 
     }); 

    } 

    public List<HookCreateRequest> getReceivers() { 
     return receivers; 
    } 

} 

xml 구성이 없습니다. 기타 관련성이 있는지 확실하지 않은 경우

EDIT 2016년 7월 4일

실행시는 I (I는 두 개의 서로 다른 인스턴스가 생성되고 있다고 의심) 출력 스케줄 인스턴스를 수정했다. 그러나 로그는 작업 객체의 동일한 인스턴스임을 나타냅니다. logs : 15:01:16.170 DEBUG - scheduled.ScheduleHookRecreation - Schedule task running: [email protected] ...task stuff happening ...first run completes, then: 15:01:39.050 DEBUG - scheduled.ScheduleHookRecreation - Schedule task running: [email protected] 그래서 동일한 작업 인스턴스 (@705a651b)로 보입니다. 왜 달콤한 것들의 이름으로 두 번이나 실행됩니까?

EDIT 2016년 7월 5일

난 단지 일부 기록 출력과, 예정된 방식을 수행하는 클래스에 @PostConstruct 방법을 추가했다. I는 @PostConstruct 메소드가 호출되고 있음을 확인할 수함으로써 두 번 - 콩이 두 번 집어 들었다는 것을 확인하는 것으로 보이는데, 아마도 콩이 두 번 스케쥴러에 공급된다는 의미 일 것이다. 어떻게 이것을 막는가?

+0

제공하신 정보에서 매우 어렵습니다. 문제의 [최소한의 완전하고 검증 가능한 예] (/ help/mcve)를 공유 할 수 있습니까? –

+0

@AndyWilkinson 공정한 - 정보 및 코드 스 니펫을 추가하는 편집 된 질문입니다. 필요에 따라 공급하는 것 이상으로 관련성이있는 것이 무엇인지 모릅니다. – demaniak

답변

0

내 문제의 경우, 이유는 @Scheduled annotation의 initialDelay 매개 변수 부재 - 응용 프로그램 시작시 메소드가 호출되었습니다.

+0

슬프게도 이것이 내 문제로 보이지 않습니다. 'initialDelay'를 설정해도 도움이되지 않습니다.결국 작업이 실행되면 여전히 두 번 실행됩니다. – demaniak