diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java index 016c8c980ec58691ca0da505c920cc85ec10aafb..6c15145fbe0076c46188b27d7466d8e3ab1f1dae 100644 --- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java +++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java @@ -183,6 +183,8 @@ public class MasterServer implements IStoppable { } catch (Exception e) { logger.warn("Quartz service stopped exception:{}", e.getMessage()); } + // close spring Context and will invoke method with @PreDestroy annotation to destory beans. like ServerNodeManager,HostManager,TaskResponseService,CuratorZookeeperClient,etc + springApplicationContext.close(); } catch (Exception e) { logger.error("master server stop exception ", e); } diff --git a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/bean/SpringApplicationContext.java b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/bean/SpringApplicationContext.java index 484b837d70632868f4d7ac73230843f727115407..61dfcb35d7bf826c7d9ce4c02dd7cd89cb065c89 100644 --- a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/bean/SpringApplicationContext.java +++ b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/bean/SpringApplicationContext.java @@ -20,6 +20,7 @@ package org.apache.dolphinscheduler.service.bean; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; +import org.springframework.context.support.AbstractApplicationContext; import org.springframework.stereotype.Component; @Component @@ -32,6 +33,13 @@ public class SpringApplicationContext implements ApplicationContextAware { SpringApplicationContext.applicationContext = applicationContext; } + /** + * Close this application context, destroying all beans in its bean factory. + */ + public void close() { + ((AbstractApplicationContext)applicationContext).close(); + } + public static T getBean(Class requiredType) { return applicationContext.getBean(requiredType); } diff --git a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/zk/CuratorZookeeperClient.java b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/zk/CuratorZookeeperClient.java index e25a22f03142f438bfd97b39a248490a43136435..a437a63b4ebc86f13d3068eb8cb0df54391c01af 100644 --- a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/zk/CuratorZookeeperClient.java +++ b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/zk/CuratorZookeeperClient.java @@ -27,6 +27,7 @@ import org.apache.curator.framework.CuratorFrameworkFactory; import org.apache.curator.framework.api.ACLProvider; import org.apache.curator.framework.state.ConnectionState; import org.apache.curator.retry.ExponentialBackoffRetry; +import org.apache.curator.utils.CloseableUtils; import org.apache.zookeeper.ZooDefs; import org.apache.zookeeper.data.ACL; @@ -34,6 +35,8 @@ import java.nio.charset.StandardCharsets; import java.util.List; import java.util.concurrent.TimeUnit; +import javax.annotation.PreDestroy; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; @@ -125,4 +128,9 @@ public class CuratorZookeeperClient implements InitializingBean { public CuratorFramework getZkClient() { return zkClient; } + + @PreDestroy + public void close() { + CloseableUtils.closeQuietly(zkClient); + } }