2013-10-26 2 views
0

나는 몇 가지 코드 사용은 다음과 같이 할 수있는 유용한있는 일이이어떻게 프로젝트에서 addShutdownHook을 사용할 수 있습니까?

Runtime.getRuntime().addShutdownHook(new Thread(){ 
    ConfigurableApplicationContext.stop(); 
    //close spring context; 
    threadpool.shutdownnow(); 
    //close theadpool 
}); 

같은 ShutdownHook 보았다?

은 내가

JVM 출구는, 어쩌면 스레드 컨텍스트가 너무 닫습니다 봄 즉시 종료 할 수 있습니다

을 생각했다

우리는 우리가하는 System.exit를 호출 할 때 다음에 무엇을해야 무엇을()?

답변

0

정말 응용 프로그램과 개체 및 사용자의 컨텍스트 외부에있는 스레드의 수명주기에 따라 다릅니다. 독립 실행 형 Java 프로세스 내에서 스프링 컨테이너를 실행하는 경우 이와 같이 종료 훅을 트래핑하는 것이 한 가지 방법입니다. 또 다른 방법은 TCP 포트에서 수신 대기하고 종료 프로세스를 시작하기위한 명령을 보내는 것입니다. tomcat과 같은 웹 컨테이너에서 실행하고 있다면 Spring이 컨텍스트 리스너와 함께 지원하는 일반적인 webapp shutdown 표준을 따라야합니다.

스프링 컨테이너 내부에있는 빈으로 스레드를 모두 관리 할 수 ​​있도록 앱을 다시 설계하는 것도 고려해 볼 수 있습니다. 예를 들어, 시작/중지 메소드에 대한 지시문 (속성)으로 구성된 bean을 사용하고 그 bean은 스레드 풀링을 위해 Executor를 사용합니다. 이렇게하면, 종료는 Spring 컨테이너를 종료하는 것 뿐이며, Spring은 빈의 순차적 종료를 아주 잘 지원한다. 이러한 빈 중 하나는 Executor 내에서 스레드를 보유하고있는 객체입니다. 스프링 빈을 외부 스레드와 통합하는 것보다 훨씬 깔끔한 방법입니다.

희망이 도움이됩니다.

관련 문제