2012-06-12 3 views
0

경우에 따라 Tomcat을 다시 시작하면 응용 프로그램이 즉시 중지되어 Oracle DB의 내 소비 데이터가 오류 상태로 유지됩니다. 그래서 일단 바람둥이가 멈 추면 상태를 다루는 데 도움이되는 방법이 있는지 알고 싶습니다. 알 수없는 이유로 실제 사건은 바람둥이의 중지 절차에서 발생합니다. 바람둥이가 멈 추면 어떻게 될지 확신 할 수 없습니다.바람둥이 멈추거나 다시 시작하면 어떻게되는지 확인하는 방법

답변

1

정상적으로 다시 시작하는 경우 서버가 응용 프로그램을 종료하기 전에 shutdownhook을 등록하고 실행할 수 있어야합니다.

자세한 내용은 javadocs를 확인하십시오. http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html#addShutdownHook(java.lang.Thread).

이 같은 종료 후크를 추가 할 수 있습니다

Runtime.getRuntime().addShutdownHook(new Thread(new Runnable(){ 
    public void run() { 
     // clean-up logic 
    } 
})); 
+0

감사합니다. 나는 또 다른 문제가있다. 바람둥이가 멈 추면. 모든 스레드의 종료가 thread.interrupt를 통해 이루어지는 경우 그렇다면. 나는 중단 된 국가를 판단하여 무언가를 완료하도록 할 수 있습니까? – jiafu

+0

나는 당신의 질문을 완전히 이해하고 있는지 확신하지 못합니다. 스레드를 중지 할 수있는 몇 가지 다른 방법이 있습니다. Kill -9는 서버를 정상적으로 종료하는 것과 매우 다릅니다. 이 답변은 많은 세부 정보를 제공합니다 : http://stackoverflow.com/a/2541618/1442761. –

+0

아마도 내가 명확하게 설명하지 않았을 것입니다. 내 말은 jvm을 멈출 때 존재하는 실행 스레드에 어떤 영향을 주는지입니다. 많은 당신 덕분에! – jiafu

2

은 아마 당신이 당신의 바람둥이 응용 프로그램 (link)에 대한 LifecycleListener을 등록 할 수 있습니다. 라이프 사이클 리스너는 컨텍스트가로드되고 닫히면 바로 호출됩니다.

여기에 더 많은 설명이 포함되어 있습니다. link. ServletContextListener 인터페이스의 contextInitializedcontextDestroyed 메소드를 살펴볼 수 있습니다.

+0

감사합니다. 나는 또 다른 문제가있다. 바람둥이가 멈 추면. 모든 스레드의 종료가 thread.interrupt를 통해 이루어지는 경우 그렇다면. 나는 중단 된 국가를 판단하여 무언가를 완료하도록 할 수 있습니까? – jiafu

+1

'contextDestroyed' 메소드에서 실제로 쓰레드를 멈출 수 있습니다. 'contextInitialized'에서 시작할 스레드를 추적하면됩니다. – rmarimon

관련 문제