2011-08-11 2 views
3

우리 응용 프로그램은 서버 코드가 클라이언트 프로세스에 포함될 때 클라이언트 서버 모드와 독립 실행 형 모드에서 모두 실행됩니다. 내가 작업을 예약 한 봄 콩 XML의 , 스케줄러 스레드가 데몬 스레드하지 않기 때문에, 응용 프로그램이 종료되지 않은 독립형 모드에서 <task : scheduler> 작업 중지

<task:scheduled-tasks scheduler="myScheduler"> 
     <task:scheduled ref="link-to-server" method="heartbeat" fixed-rate="1000"/> 
</task:scheduled-tasks> 

있다. 어떻게 그들을 멈추게하거나 이러한 스레드를 데몬으로 만들 수 있습니까?

감사합니다.

답변

0

데몬을 만들지 마십시오. 스레드가 너무 갑자기 멈추어 프로세스가 일관성없는 상태가 될 수 있습니다. 나는 스프링 컨텍스트의 표준 종료를 믿고, 따라서 스케줄러는 interrupts 실행중인 모든 스레드를 참조한다. 이 경우 작업에 poll Thread.currentThread().isInterrupted을 폴링하여 종료를 결정해야합니다. Object.wait()과 같은 차단 방법은 중단시 InterruptedException을 전송합니다.

+0

스프링 컨텍스트를 종료 할 때 언제나 알 수 있는지 확실하지 않습니다. 이 코드는 많은 테스트에서 사용되며 때로는 사람들이 main 메소드를 작성하고 컨텍스트를 작성하며 객체를 호출합니다. 이제이 코드를 모두 변경하기가 어려울 것입니다. 같은 XML에서 스프링 솔루션을 선호합니다. –

+0

스프링은 JVM 종료 훅을 등록하므로 걱정할 필요가 없습니다. –

+0

나는 그것이 작동하지 않는 것을 본다. JVM은 System.exit()을 넣을 때만 완료됩니다. –