springboot 优雅关闭_springboot优雅的关闭应用
使用actuator,通过发送http请求关闭
将应用注册为linux服务,通过service xxx stop关闭
具体这两种方式如何实现,这里就不说了,网上百度一堆,主要讲一下在这两种情况下web应用listener的一些问题
一般来讲,我们的应用都应该在结束的时候对资源进行回收处理,jvm帮我们做了一部分,springboot也做了相应bean的回收,那如果是我们自己创建的线程池或是其他未托管于spring的资源呢?
在非web的应用中,我们一般使用勾子来实现,从而保证在jvm退出时,能够进行一些资源的回收(直接kill无法保证执行),kill命令相当于直接把应用干掉,是一种非正常情况下中止应用的方式。ctrl+c,System.exit(),程序正常退出都会触发勾子 Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
public void run(){
try {
shutdown(componentName);
} catch (Exception e) {
LOGGER.error("shutdown error:", e);
}
}
}, componentName + "_shutdown_hook_thread"));
在web应用中,勾子就不一定能够生效了,而是通过实现ServletContextListener接口,可以在context初始化和结束的时候做一些资源创建和回收的操作 public class ContextListener implements ServletContextListener{
private static final Logger LOGGER = LoggerFactory.getLogger(ContextListener.class);
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
LOGGER.info("contextInitialized");
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
LOGGER.info("contextDestroyed begin...");
ShutdownUtil.destroy();
LOGGER.info("contextDestroyed end...");
}
}
问题来了,在使用第二种方式将springboot应用注册为linux服务时,发现通过service xxx stop命令停止应用时,contextDestroyed的日志根本没打印出来,怀疑是LOGGER对象已经被jvm回收,于是改成System.out,这次begin打印出来了,但是并没有调用 ShutdownUtil.destroy()方法,怀疑同上,具体的机制没去详细了解,猜测是springboot自己的回收策略,或者是该插件的坑。
使用actuator的方式没有问题,会正常的执行destroyed的回收
springboot 优雅关闭_springboot优雅的关闭应用相关推荐
- springboot 优雅关闭_Springboot 优雅停止服务的几种方法
在使用Springboot的时候,都要涉及到服务的停止和启动,当我们停止服务的时候,很多时候大家都是kill -9 直接把程序进程杀掉,这样程序不会执行优雅的关闭.而且一些没有执行完的程序就会直接退出 ...
- springboot 优雅停机_SpringBoot 优雅停止服务的几种方法 第309篇
相关历史文章(阅读本文之前,您可能需要先看下之前的系列?) 国内最全的Spring Boot系列之三 一分钟get:缓存穿透.缓存击穿.缓存雪崩 - 第304篇 布隆过滤器Bloom Filter竟然 ...
- Socket编程中的强制关闭与优雅关闭及相关socket选项
以下描述主要是针对windows平台下的TCP socket而言. 首先需要区分一下关闭socket和关闭TCP连接的区别,关闭TCP连接是指TCP协议层的东西,就是两个TCP端之间交换了一些协议包( ...
- Android关掉多个activity,Android应用开发之Android Activity栈管理 制定关闭某一个Activity,关闭所有Activit...
本文将带你了解Android应用开发之Android Activity栈管理 制定关闭某一个Activity,关闭所有Activit,希望本文对大家学Android有所帮助. 系统Api :打开新的 ...
- 热启动必须联网吗_供暖结束,地暖是关闭供水阀门还是关闭回水阀门?你做对了吗?...
天气渐渐暖和起来 很多城市都停止供暖了 一些家庭也停止使用地暖 那么今天就来聊一聊,停止供暖后 地暖系统应该怎么保养 地暖不用时候是关闭供水阀门还是关闭回水阀门? 供暖结束 暖气阀门到底要不要关 一般 ...
- java 关闭时_java – 活动关闭时服务停止
我已经阅读了一些与这个问题相关的答案,它们似乎都是一样的: "使用START_STICKY运行您的服务" "在前台运行您的服务" "使用startSe ...
- linux 关闭自动升级,开启关闭Centos的自动更新(转)
开启关闭Centos的自动更新 关闭Centos的自动更新,操作记录如下: [[email protected] alpha]# chkconfig –list yum-updatesd yum-up ...
- WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭
原文:WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭 在我们开发WCF项目的时候,常常会碰到一些莫名其妙的错误,有时候如果根据它的错误提示信息,一般很难定位到具体的问题所在,而 ...
- java io流不关闭_Java IO流关闭问题的深入研究
前几天看了一篇文章(见参考文章),自己动手试了下,发现有些不一样结论,作博客记录下,本文主要研究两个问题: 包装流的close方法是否会自动关闭被包装的流? 关闭流方法是否有顺序? 包装流的close ...
最新文章
- Drawer的使用(一):xml文件中使用
- JNDI学习总结(1)——JNDI入门简介
- jpa oracle mysql,JPA-Oracle-Mysql連接數據庫配置
- python中strip(),lstrip(),rstrip()函数的讲解
- 工业界和学术界的思考
- SSO模型及单点登录SSO技术选型
- javascript之ua与urlSchema
- B. Box Fitting
- JAVA 搭建基于SPRINGBOOT的SSM(SPRING + SPRINGMVC + MYBATIS)的MAVEN项目
- linux rename
- VIVE Input Utility
- idea 集成svn
- 机器人学随堂笔记(1)ᝰ机器人简介、构成和分类
- 都能看懂的嵌入式linux/android alsa_aplay alsa_amixer命令行使用方法
- pandas的认识与dataframe的认识 day04课件代码
- 新浪微博 redis mysql_新浪微博:史上最大的Redis集群
- 找工作,还是找户口?
- 如何用python把Mac录屏转换成GIF
- 单元测试|Unittest setup前置初始化和teardown后置操作
- 如何避免背光源正负极做错?