sping boot 捕获 服务停止

zhiluan7665 2019-08-14 03:50:38
在spring boot工程中,启动多个线程,每个线程中socket通信,如果tomcat停止服务,
需要在每个线程通过socket给服务器发一个停止指令,怎么能捕获到这个事件呢?
如果tomcat停止服务,会不会启动的线程还继续运行?
...全文
131 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
baichangda234 2019-08-16
  • 打赏
  • 举报
回复
在tomcat中定一个api来检测服务器状态 将socket通知程序独立出来作为一个专门的进程,定时访问tomcat api检测服务,有异常发送通知
瘦死的黑骆驼 2019-08-15
  • 打赏
  • 举报
回复
1、首先这个服务停止得是正常操作,强制杀死进程或者其他不正崩溃是无法捕获的。 可以拿一个类实现ServletContextListener,重写contextDestroyed方法

@Override
	public void contextDestroyed(ServletContextEvent sce) {
		System.out.println("tomcat容器销毁");
	}
2、通常你这些线程都是非守护线程,正常来说Tomcat服务停止,是要退出虚拟机的,这些非守护线程也会结束的。在Tomcat中我好像没有遇到Tomcat退出后线程还在运行的,除非是Tomcat停止时出现异常。但是在weblogic中确实遇到这样的情况,servlet容器销毁时定时器(其实也是线程)任然执行。所以最好是在contextDestroyed被触发时,将所有的定时器以及你启动的非守护线程都正常退出就好了。如果有哪里说的不对,欢迎猿友们指正。

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧