标签 Linux 下的文章

直接运行java程序

假设我们在容器中直接启动的是我们的程序,例如java -jar xxx.jar。如果执行docker stop <container>,则意味着调用了kill -15 1

对于java程序而言,它会接收到SIGTERM信号,Runtime的ShutdownHook钩子将会被回调。像spring这样的框架,都会把自己加入到ShutdownHook回调中,在回调中执行destroy、close等生命周期操作。

所以说如果只是执行kill -15 PID命令,java程序是可以优雅的关闭。但同时我们也能看出,如果在ShutdownHook钩子中执行很耗时的操作,那么执行这个命令短时间内也不会停止java程序。所以在ShutdownHook中尽量不要做耗时长的操作,而是应该处理一些IO关闭、缓存刷新的操作。

- 阅读剩余部分 -