logback的ShutdownHook关闭原理解析
序
本文主要研究一下logback的ShutdownHook
ShutdownHook
ch/qos/logback/core/hook/ShutdownHook.java
/** * Interface describing a logback shutdown hook implementation * * @author Mike Reinhold */ public interface ShutdownHook extends Runnable, ContextAware { }
ShutdownHook接口继承了Runnable、ContextAware接口
ShutdownHookBase
ch/qos/logback/core/hook/ShutdownHookBase.java
/** * Base class for classes implementing a Logback ShutdownHook via extension * * @author Mike Reinhold */ public abstract class ShutdownHookBase extends ContextAwareBase implements ShutdownHook { public ShutdownHookBase() { } /** * Default method for stopping the Logback context */ protected void stop() { addInfo("Logback context being closed via shutdown hook"); Context hookContext = getContext(); if (hookContext instanceof ContextBase) { ContextBase context = (ContextBase) hookContext; context.stop(); } } }
ShutdownHookBase继承了ContextAwareBase,声明实现ShutdownHook,它提供了一个stop方法,用于关闭ContextBase
DelayingShutdownHook
ch/qos/logback/core/hook/DelayingShutdownHook.java
/** * ShutdownHook implementation that stops the Logback context after a specified * delay. The default delay is 0 ms (zero). * * @author Mike Reinhold */ public class DelayingShutdownHook extends ShutdownHookBase { /** * The default is no delay before shutdown. */ public static final Duration DEFAULT_DELAY = Duration.buildByMilliseconds(0); /** * The delay in milliseconds before the ShutdownHook stops the logback context */ private Duration delay = DEFAULT_DELAY; public DelayingShutdownHook() { } public Duration getDelay() { return delay; } /** * The duration to wait before shutting down the current logback context. * * @param delay */ public void setDelay(Duration delay) { this.delay = delay; } public void run() { addInfo("Sleeping for "+delay); try { Thread.sleep(delay.getMilliseconds()); } catch (InterruptedException e) { } super.stop(); } }
DelayingShutdownHook继承了ShutdownHookBase,其run方法先sleep指定的delay,然后执行stop方法
示例
<configuration debug="false"> <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"> <delay>10</delay> </shutdownHook> <appender name="A" class="ch.qos.logback.core.read.ListAppender"/> <root level="DEBUG"> <appender-ref ref="A" /> </root> </configuration>
小结
logback的ShutdownHook接口继承了Runnable、ContextAware接口,它有一个抽象类ShutdownHookBase提供了一个stop方法,用于关闭ContextBase,它的子类为DelayingShutdownHook,可以延迟指定时间再关闭ContextBase。
以上就是logback的ShutdownHook的详细内容,更多关于logback ShutdownHook的资料请关注脚本之家其它相关文章!
相关文章
SpringBoot 实现自定义的 @ConditionalOnXXX 注解示例详解
这篇文章主要介绍了SpringBoot 实现自定义的 @ConditionalOnXXX 注解,通过示例代码介绍了实现一个自定义的 @Conditional 派生注解,Conditional 派生注解的类如何注入到 spring 容器,需要的朋友可以参考下2022-08-08Java concurrency之Condition条件_动力节点Java学院整理
Condition的作用是对锁进行更精确的控制。下面通过本文给大家分享Java concurrency之Condition条件的相关知识,非常不错,具有参考借鉴价值,需要的朋友参考下吧2017-06-06
最新评论