저는 스프링 MVC 애플리케이션으로 구현 된 플러그인을 만들고 있습니다. 이 플러그인은 서버 중 하나에서 GUI를 통해 3 - 6 개의 Tomcat 서버에 배포됩니다. 각 플러그인 인스턴스에는 @Scheduled 메소드가있어 서버에 대한 정보를 수집하여 중앙 데이터베이스에 저장합니다.서버에서 @Scheduled 스레드를 안전하게 제거하는 방법은 무엇입니까?
내 문제는 플러그 인을 제거하기위한 gui 인터페이스가 @Scheduled 스레드 중 일부를 실행 중으로 남겨 둡니다.
예를 들어 서버 1 - 3이있는 환경이 있습니다. 서버 1의 gui를 통해 플러그인을 설치하고 활성화합니다. 이제 응용 프로그램의 인스턴스가 서버 1 - 3에 @Scheduled 스레드를 실행합니다. 난 다시 서버 1로 가서 플러그인을 제거, 스레드가 안정적으로 서버에 하나 개가 아니라 서버 2 또는 3
나는 다음과 같은 구현했습니다 살해되지만 동작이 계속 :
@Component
public class ContextClosedListener implements ApplicationListener<ContextClosedEvent> {
@Autowired
ThreadPoolTaskExecutor executor;
@Autowired
ThreadPoolTaskScheduler scheduler;
public void onApplicationEvent(ContextClosedEvent event) {
scheduler.shutdown();
executor.shutdown();
}
}
을 추가, 나는 이것을 @Scheduled 메소드가 아닌 컨텍스트 리스너로 구현하려고 생각했지만, 유지 보수와 extech를 위해 Spring을 고집하고자한다. 불가항력적인 이유.
어떻게 이런 환경에서 스레드를 안정적으로 제거 할 수 있습니까?