怎么写代码才能让 springboot 应用进程停止啊

2021-02-19 23:56:40 +08:00
 luxinfl

当应用启动时,如果端口号被占用,程序会报错,但是 idea 上项目还是运行的状态。因为在端口占用前,应用起了几个线程去跑其他任务,导致应用没有正常关闭。有比较靠谱的方法可以让程序正常停止么? 有想过

try {
    SpringApplication.run(ClcsApplication.class, args);
}catch (Exception e){
    System.exit(0);
}

但是不建议使用。 也想过

MyApplicationRunner implements ApplicationListener<ApplicationFailedEvent>

但是需要一个个的关闭线程,而且还不一定好用。

3202 次点击
所在节点    程序员
21 条回复
devld
2021-02-20 18:48:25 +08:00
@luxinfl 我的理解是,线程池用 shutdownNow 停止时,会 interrupt 所有正在运行的线程。所以在任务线程中响应中断信号就可以了。
对于被 io 阻塞的线程,interrupt 后,会抛出 InterruptedException,这时候停止任务就 ok 了;对于循环,在循环开始时,判断 Thread.isInterrupted 是否是 true,是 true 就结束循环。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/754423

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX