我是靠谱客的博主 壮观冬日,最近开发中收集的这篇文章主要介绍基于JVM的ShutdownHook端口冲突优雅关闭,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

服务启动端口冲突解决方案

报错信息:Address already in use

Step1:修改启动端口执行server.port

Step2:lsof -i:端口 或 netstat -anp|grep 端口 ==>找到启动端口对应的服务进程pid
使用kill -9 pid 执行进程pid强杀

强杀严重问题讲解

比如一些服务或对象在进行通道连接,文件输入输入出等。这种情况是不能使用强杀的。强杀就类似电脑你突然把电拔了。你想啊,服务器正在修改一些文件,你突然强杀,这些文件就没有保存

Step3: kill -15配合ShutdownHook实现优雅关闭

kill命令 Linux 中 kill 指令负责杀死进程,其后可以紧跟⼀个数字,代表信号编号(Signal)

kill -l
HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM
STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL
PWR SYS

Java进程优雅关闭的意义

关闭 socket 链接

清理临时⽂件

发送消息通知给订阅⽅,告知⾃⼰下线

各种资源的释放 jerkins钩⼦ ,往git提交代码==》执⾏了⾃动化构建==》服务重启 dubbo spi的钩子

代码验证

Step1:启动类添加

public class CouponAppApplication {

    public static void main(String[] args) {
        SpringApplication.run(CouponAppApplication.class, args);

        //执行 kill -15执行 ShutdownHook
        Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("执行JVM ShutdownHook");
            }
        }));
    }

}

Step2:配置类

@Component
public class TestDisposeableBean implements DisposableBean {


    @Override
    public void destroy() throws Exception {
        System.out.println("测试TestDisposeableBean已经销毁");
    }
}

启动项目后使用 kill -15 pid杀死进程。查看结果

如果项目中有使用zookeeper,还会关闭zookeeper的一个线程。说明zookeeper也是spring shutdownhook的一种实现
在这里插入图片描述

最后

以上就是壮观冬日为你收集整理的基于JVM的ShutdownHook端口冲突优雅关闭的全部内容,希望文章能够帮你解决基于JVM的ShutdownHook端口冲突优雅关闭所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部