使用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优雅的关闭应用相关推荐

  1. springboot 优雅关闭_Springboot 优雅停止服务的几种方法

    在使用Springboot的时候,都要涉及到服务的停止和启动,当我们停止服务的时候,很多时候大家都是kill -9 直接把程序进程杀掉,这样程序不会执行优雅的关闭.而且一些没有执行完的程序就会直接退出 ...

  2. springboot 优雅停机_SpringBoot 优雅停止服务的几种方法 第309篇

    相关历史文章(阅读本文之前,您可能需要先看下之前的系列?) 国内最全的Spring Boot系列之三 一分钟get:缓存穿透.缓存击穿.缓存雪崩 - 第304篇 布隆过滤器Bloom Filter竟然 ...

  3. Socket编程中的强制关闭与优雅关闭及相关socket选项

    以下描述主要是针对windows平台下的TCP socket而言. 首先需要区分一下关闭socket和关闭TCP连接的区别,关闭TCP连接是指TCP协议层的东西,就是两个TCP端之间交换了一些协议包( ...

  4. Android关掉多个activity,Android应用开发之Android Activity栈管理 制定关闭某一个Activity,关闭所有Activit...

    本文将带你了解Android应用开发之Android Activity栈管理  制定关闭某一个Activity,关闭所有Activit,希望本文对大家学Android有所帮助. 系统Api :打开新的 ...

  5. 热启动必须联网吗_供暖结束,地暖是关闭供水阀门还是关闭回水阀门?你做对了吗?...

    天气渐渐暖和起来 很多城市都停止供暖了 一些家庭也停止使用地暖 那么今天就来聊一聊,停止供暖后 地暖系统应该怎么保养 地暖不用时候是关闭供水阀门还是关闭回水阀门? 供暖结束 暖气阀门到底要不要关 一般 ...

  6. java 关闭时_java – 活动关闭时服务停止

    我已经阅读了一些与这个问题相关的答案,它们似乎都是一样的: "使用START_STICKY运行您的服务" "在前台运行您的服务" "使用startSe ...

  7. linux 关闭自动升级,开启关闭Centos的自动更新(转)

    开启关闭Centos的自动更新 关闭Centos的自动更新,操作记录如下: [[email protected] alpha]# chkconfig –list yum-updatesd yum-up ...

  8. WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭

    原文:WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭 在我们开发WCF项目的时候,常常会碰到一些莫名其妙的错误,有时候如果根据它的错误提示信息,一般很难定位到具体的问题所在,而 ...

  9. java io流不关闭_Java IO流关闭问题的深入研究

    前几天看了一篇文章(见参考文章),自己动手试了下,发现有些不一样结论,作博客记录下,本文主要研究两个问题: 包装流的close方法是否会自动关闭被包装的流? 关闭流方法是否有顺序? 包装流的close ...

最新文章

  1. Drawer的使用(一):xml文件中使用
  2. JNDI学习总结(1)——JNDI入门简介
  3. jpa oracle mysql,JPA-Oracle-Mysql連接數據庫配置
  4. python中strip(),lstrip(),rstrip()函数的讲解
  5. 工业界和学术界的思考
  6. SSO模型及单点登录SSO技术选型
  7. javascript之ua与urlSchema
  8. B. Box Fitting
  9. JAVA 搭建基于SPRINGBOOT的SSM(SPRING + SPRINGMVC + MYBATIS)的MAVEN项目
  10. linux rename
  11. VIVE Input Utility
  12. idea 集成svn
  13. 机器人学随堂笔记(1)ᝰ机器人简介、构成和分类
  14. 都能看懂的嵌入式linux/android alsa_aplay alsa_amixer命令行使用方法
  15. pandas的认识与dataframe的认识 day04课件代码
  16. 新浪微博 redis mysql_新浪微博:史上最大的Redis集群
  17. 找工作,还是找户口?
  18. 如何用python把Mac录屏转换成GIF
  19. 单元测试|Unittest setup前置初始化和teardown后置操作
  20. 如何避免背光源正负极做错?

热门文章

  1. 手动关联endnote20和wps
  2. 微信直播应该如何引流呢
  3. 解决网易云音乐linux-1.2.1无法保存设置
  4. 【身体这些部位不舒服的时候,你知道意味着什么吗?】
  5. elasticsearch5之Elastalert 安装使用 配置邮件报警和报警模版
  6. Tableau权限设置方法
  7. 「雕爷学编程」Arduino动手做(25)——MQ2气敏检测模块
  8. 如何实现ASP.NET中网站访问量的统计
  9. hackme inndy pwn onepunch writeup
  10. Java Web GIS 地理信息系统开发