怎么写代码才能让 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>

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

3292 次点击
所在节点    程序员
21 条回复
sutra
2021-02-20 00:54:01 +08:00
你得先讓自己啟的那幾個線程終止呀。
cslive
2021-02-20 08:29:11 +08:00
windows 下打开命令窗口运行 taskkill /f /im java.exe
yalin
2021-02-20 09:06:53 +08:00
kill 进程?
wbf1013
2021-02-20 09:10:35 +08:00
其他线程只要是在 spring 的生命周期里就可以了,主线程挂了就全挂了
Kinnice
2021-02-20 09:10:58 +08:00
可以试试在最前面加个启动环境检测,检测不过就不往下走了(
luxinfl
2021-02-20 10:21:09 +08:00
@cslive
@yalin 我是在想程序怎么处理,不用服务器敲命令
luxinfl
2021-02-20 10:22:42 +08:00
@wbf1013
@Kinnice
我现在把几个 kafka 的 bean 延迟启动了,但是不知道为啥,端口号被占用报错,程序还是不能正常停止。看了 dump 信息有好多线程在 waiting
MapHacker
2021-02-20 10:33:23 +08:00
代码里面直接 killProcess ?
luxinfl
2021-02-20 10:37:31 +08:00
@MapHacker 这个和直接 System.exit 一样吧,
leeyuzhe
2021-02-20 10:38:28 +08:00
打成 jar 包运行的时候会全部退出,但是在 idea 里面不会,不知道为什么
yumenawei
2021-02-20 10:42:03 +08:00
Runtime.getRuntime().addShutdownHook(new Thread(() -> System.out.println("Hello world !")));
试下这个?
intmax2147483647
2021-02-20 11:33:06 +08:00
为什么不从根本上解决问题 -> 端口冲突?
devld
2021-02-20 12:04:17 +08:00
启动的几个子线程的任务中实现 DisposableBean,在回调中终止任务。
wzcloud
2021-02-20 12:39:15 +08:00
监听应用关闭事件,然后主动关闭线程;或者把那几个现场设置成守护线程?
luxinfl
2021-02-20 16:40:51 +08:00
@intmax2147483647 测试提出来的,没办法。而且吧端口号不能用,程序不应该退出麽。。
luxinfl
2021-02-20 16:41:48 +08:00
@devld 像异步线程池这个,日志就是 shutting down,这意思是不是一直在停止。。。
luxinfl
2021-02-20 16:42:15 +08:00
@wzcloud 怎么主动关线程,这个真不会。。。
Kasumi20
2021-02-20 17:00:48 +08:00
中断其它线程,其它线程通过 Thread.sleep(0)响应中断异常
luxinfl
2021-02-20 17:02:44 +08:00
@Kasumi20 这不用搞个 while 循环麽?
newmlp
2021-02-20 18:18:48 +08:00
kill -9

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

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

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

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

© 2021 V2EX