2011-02-24 5 views
0

서버 시작시 서블릿에서 Thread.sleep을 호출 할 때 Tomcat을 시작하지 못했습니다.서버 시작시 서블릿에서 Thread.sleep을 호출 할 때 Tomcat을 시작하지 못했습니다.

서버 시작시로드되는 Servet가 있습니다. 서블릿의 init 메소드 내에서 MailSenderUtility 클래스의 sendMail 메소드가 호출됩니다. sendMail 메서드 안에서 Thread.sleep() 메서드를 호출하여 오후 8 시가 아닌 경우 계산 된 시간 동안 프로그램을 종료했습니다.

이 코드 (Thread.sleep) 서버로 인해 시작되지 않습니다. Thread.sleep 문을 삭제하면 올바르게 작동합니다.

더 좋은 방법이 있다면 알려 주시기 바랍니다. 귀하의 지식에 대한 몇 가지 제한으로 인해 내 스케줄러에 대한 석영과 자바 타이머 클래스를 사용할 수 없습니다.

모두에게 감사드립니다.

Dheeraj

답변

2

Dheeraj 당신은 캔트 초기화에 대한 책임 스레드를 "정지". Servlet 객체가 적합하지 않기 때문에 다른 곳에서 해보십시오.

ContextListener이 필요합니다. 잘 설명 된 also here.

행운을 빈다.

2

물론 주 스레드를 잠자기 상태로 설정하고 있습니다.

대신 별도의 스레드를 만들어 MailSenderUtility를 실행해야합니다. 그런 다음 기본 초기화 스레드에 영향을주지 않고이 스레드를 잠들 수 있습니다.

간단한 예 :

new Thread(new Runnable(){ 
     public void run() { 
      // start MailSenderUtility here 
     } 
    }).start(); 
+0

그래 잘하지만 그렇지 않으면 당신은 (톰캣 로그에 오류) 상황에 맞는 재배치하는 동안 문제로 실행이 제대로 스레드를 중지하는 것을 잊지 마십시오. ContextListener를 사용하고 contextDestroyed 메서드를 제대로 구현하는 것이 좋습니다. – lzap

+0

동의. 귀하의 솔루션은 의심 할 여지없이 깨끗합니다. 내 것은 단지 빠른 해킹 일뿐입니다. –

관련 문제