概述
服务启动端口冲突解决方案
报错信息: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端口冲突优雅关闭所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复