作家
登录

常见Java应用如何优雅关闭

作者: 来源: 2017-12-19 11:04:37 阅读 我要评论

经由过程 kill -l 查看linux支撑哪些旌旗灯号:


一、媒介

在我们进行体系进级的时刻,往往须要封闭我们的应用,然后重启。在封闭应用前,我们欲望做一些前置操作,比如封闭数据库、redis连接,清理zookeeper的临时节点,释放分布式锁,持久化缓存数据等等。

在linux上,我们封闭过程主如果应用 kill 的方法。

当履行该敕令今后,linux会向过程发送一个旌旗灯号,过程收到今后之后,可以做一些清理工作。

kill 敕令默认的旌旗灯号值为 15 ,即 SIGTERM 旌旗灯号。

常见Java应用若何优雅封闭

linux供给了 signal() api,可以将旌旗灯号处理函数注册上去:

  1. #include <signal.h> 
  2. #include <stdio.h> 
  3. #include <unistd.h> 
  4. #include <stdlib.h> 
  5. #include <stdbool.h> 
  6.  
  7. static void gracefulClose(int sig)   
  8.     printf("履行清理工作\n"); 
  9.     printf("JVM 已封闭\n"); 
  10.     exit(0);    //正常封闭 
  11.  
  12. int main(int argc,char *argv[])   
  13.     if(signal(SIGTERM,gracefulClose) == SIG_ERR) 
  14.         exit(-1); 
  15.  
  16.     printf("JVM 已启动\n"); 
  17.  
  18.     while(true
  19.     { 
  20.         // 履行工作 
  21.         sleep(1); 
  22.     } 

三、Java供给的Shutdown Hook

在JVM封闭前,会并发履行各个Hook线程。

  1. public class ShutdownHook { 
  2.  
  3.     public static void main(String[] args) throws InterruptedException { 
  4.         Runtime.getRuntime().addShutdownHook(new DbShutdownWork()); 
  5.         System.out.println("JVM 已启动"); 
  6.  
  7.         while(true){ 
  8.             Thread.sleep(10L); 
  9.         } 
  10.     } 
  11.  
  12.     static class DbShutdownWork extends Thread{ 
  13.         public void run(){ 
  14.             System.out.println("封闭数据库连接"); 
     1/4    1 2 3 4 下一页 尾页

      推荐阅读

      全年盘点:2017数据中心领域的10大新闻事件

    买与卖2017年数据中间市场处于持续变更的状况。客户加快向云端迁徙带来的压力,再加上部件缺乏,使得数据中间>>>详细阅读


    本文标题:常见Java应用如何优雅关闭

    地址:http://www.17bianji.com/lsqh/39920.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)