diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/DubboShutdownHook.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/DubboShutdownHook.java index b596b40bc4..50f2011563 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/DubboShutdownHook.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/DubboShutdownHook.java @@ -52,7 +52,7 @@ public class DubboShutdownHook extends Thread { /** * Has it already been destroyed or not? */ - private final AtomicBoolean destroyed = new AtomicBoolean(false); + private static final AtomicBoolean destroyed = new AtomicBoolean(false); private final EventDispatcher eventDispatcher = EventDispatcher.getDefaultExtension(); @@ -111,17 +111,15 @@ public class DubboShutdownHook extends Thread { * Destroy all the resources, including registries and protocols. */ public void doDestroy() { - if (!destroyed.compareAndSet(false, true)) { - return; - } - // dispatch the DubboDestroyedEvent @since 2.7.5 dispatch(new DubboServiceDestroyedEvent(this)); } public static void destroyAll() { - AbstractRegistryFactory.destroyAll(); - destroyProtocols(); + if (destroyed.compareAndSet(false, true)) { + AbstractRegistryFactory.destroyAll(); + destroyProtocols(); + } } private void dispatch(Event event) { diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java index 4c6662afa6..ccdaa98583 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java @@ -1033,11 +1033,11 @@ public class DubboBootstrap extends GenericEventListener { } public void destroy() { + // for compatibility purpose + DubboShutdownHook.destroyAll(); if (started.compareAndSet(true, false) && destroyed.compareAndSet(false, true)) { - // for compatibility purpose - DubboShutdownHook.destroyAll(); unregisterServiceInstance(); unexportMetadataService();