Весенняя загрузка - проблема при вызове Shutdownhook

Когда я пытаюсь закрыть приложение весенней загрузки, используя ctrl+c или используя идентификатор процесса, используя скрипт ниже. Хук выключения не вызывается. Требуется какое-то решение для вызова ловушки отключения как в Windows, так и в Linux.

Скрипт выключения:

 SET /P PID_FROM_FILE= < application.pid
 taskkill /pid %PID_FROM_FILE% /f

Класс изящного крючка:

@Component
public class GracefulShutdownHook {

private static final Logger LOGGER = LogManager.getLogger   (GracefulShutdownHook.class);

@Autowired
@Qualifier("inboundChannel")
MessageChannel inboundChannel;

@Autowired
@Qualifier("pollingExecutor")
ThreadPoolTaskExecutor pollingExecutor;

  @PreDestroy 
  public void onDestroy() throws Exception {
// First stop the file integration adapter to process files
  inboundChannel.send(new  GenericMessage<String> "@'filesInChannel.adapter'.stop()"));
//  wait till current processing of files is over
 pollingExecutor.shutdown();
 LOGGER.log(Level.INFO, "Application shutdown succesfully");
}
@Bean
public ExitCodeGenerator exitCodeGenerator() {
return () -> 0;
}
 }

1 ответ

Вы не можете справиться ctrl-c ни taskkill внутри вашего приложения Spring.

Один из способов, которым вы можете соответствующим образом закрыть свое приложение, - это создать конечную точку POST /shutdown и позвонить applicationContext.close() внутри него:

@RestController
public class Shutdowner {

    @Autowired 
    ApplicationContext ctx;

    @PostMapping("/shutdown")
    public void shutdown(){
        ctx.close();
    }
}

Дополнительные примеры можно найти здесь: https://www.baeldung.com/spring-boot-shutdown

Другие вопросы по тегам