当应用启动时,如果端口号被占用,程序会报错,但是 idea 上项目还是运行的状态。因为在端口占用前,应用起了几个线程去跑其他任务,导致应用没有正常关闭。有比较靠谱的方法可以让程序正常停止么? 有想过
try {
SpringApplication.run(ClcsApplication.class, args);
}catch (Exception e){
System.exit(0);
}
但是不建议使用。 也想过
MyApplicationRunner implements ApplicationListener<ApplicationFailedEvent>
但是需要一个个的关闭线程,而且还不一定好用。
1
sutra 2021-02-20 00:54:01 +08:00
你得先讓自己啟的那幾個線程終止呀。
|
2
cslive 2021-02-20 08:29:11 +08:00
windows 下打开命令窗口运行 taskkill /f /im java.exe
|
3
yalin 2021-02-20 09:06:53 +08:00
kill 进程?
|
4
wbf1013 2021-02-20 09:10:35 +08:00 via Android
其他线程只要是在 spring 的生命周期里就可以了,主线程挂了就全挂了
|
5
Kinnice 2021-02-20 09:10:58 +08:00 via Android
可以试试在最前面加个启动环境检测,检测不过就不往下走了(
|
7
luxinfl OP |
8
MapHacker 2021-02-20 10:33:23 +08:00
代码里面直接 killProcess ?
|
10
leeyuzhe 2021-02-20 10:38:28 +08:00
打成 jar 包运行的时候会全部退出,但是在 idea 里面不会,不知道为什么
|
11
yumenawei 2021-02-20 10:42:03 +08:00
Runtime.getRuntime().addShutdownHook(new Thread(() -> System.out.println("Hello world !")));
试下这个? |
12
intmax2147483647 2021-02-20 11:33:06 +08:00
为什么不从根本上解决问题 -> 端口冲突?
|
13
devld 2021-02-20 12:04:17 +08:00 via Android
启动的几个子线程的任务中实现 DisposableBean,在回调中终止任务。
|
14
wzcloud 2021-02-20 12:39:15 +08:00 via iPhone
监听应用关闭事件,然后主动关闭线程;或者把那几个现场设置成守护线程?
|
15
luxinfl OP @intmax2147483647 测试提出来的,没办法。而且吧端口号不能用,程序不应该退出麽。。
|
18
Kasumi20 2021-02-20 17:00:48 +08:00
中断其它线程,其它线程通过 Thread.sleep(0)响应中断异常
|
20
newmlp 2021-02-20 18:18:48 +08:00
kill -9
|