How Tomcat Works 16:关闭钩子

在很多环境中,关闭应用程序时,需要做一些清理操作。问题在于,用户如果正常关闭,那么会正常清理,但是当用户非正常退出时,可能会导致没有全部清理。

比如,Tomcat 启动时,会通过调用服务的start 方法来启动一个servlet 容器。该方法又会调用其他组件的start方法。关闭的时候,也是一样,但如果突然关闭,则可能会出现意想不到的情况。幸运的是,在java 中可以通过关闭钩子优雅的解决这个问题。

Tomcat 中的关闭钩子:CatalinaShutdownHook

    protected class CatalinaShutdownHook extends Thread {

        @Override
        public void run() {
            try {
                if (getServer() != null) {
                    Catalina.this.stop();
                }
            } catch (Throwable ex) {
                ExceptionUtils.handleThrowable(ex);
                log.error(sm.getString("catalina.shutdownHookFail"), ex);
            } finally {
                // If JULI is used, shut JULI down *after* the server shuts down
                // so log messages aren't lost
                LogManager logManager = LogManager.getLogManager();
                if (logManager instanceof ClassLoaderLogManager) {
                    ((ClassLoaderLogManager) logManager).shutdown();
                }
            }
        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值