Skip to content

Commit 0adfd8d

Browse files
committed
Adding event listener to close fabric 8 clients
1 parent 7ca7738 commit 0adfd8d

File tree

3 files changed

+15
-5
lines changed

3 files changed

+15
-5
lines changed

spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/config/ConfigUtils.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ public final class ConfigUtils {
6161
|| sourceName.endsWith("-" + activeProfile + ".yaml")
6262
|| sourceName.endsWith("-" + activeProfile + ".properties");
6363

64+
private static final ApplicationListener<?> NO_OP = (e) -> { };
65+
6466
private ConfigUtils() {
6567
}
6668

@@ -344,8 +346,7 @@ public static <T> void registerSingle(ConfigurableBootstrapContext bootstrapCont
344346

345347
public static <T> void registerSingle(ConfigurableBootstrapContext bootstrapContext, Class<T> cls, T instance,
346348
String name) {
347-
registerSingle(bootstrapContext, cls, instance, name, event -> {
348-
});
349+
registerSingle(bootstrapContext, cls, instance, name, NO_OP);
349350
}
350351

351352
/**

spring-cloud-kubernetes-fabric8-autoconfig/src/main/java/org/springframework/cloud/kubernetes/fabric8/Fabric8AutoConfiguration.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@
1818

1919
import java.time.Duration;
2020

21+
import io.fabric8.kubernetes.client.Client;
2122
import io.fabric8.kubernetes.client.Config;
2223
import io.fabric8.kubernetes.client.ConfigBuilder;
2324
import io.fabric8.kubernetes.client.KubernetesClient;
2425
import io.fabric8.kubernetes.client.KubernetesClientBuilder;
2526

27+
import org.springframework.beans.factory.BeanFactoryUtils;
2628
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
2729
import org.springframework.boot.autoconfigure.condition.ConditionalOnCloudPlatform;
2830
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@@ -31,6 +33,8 @@
3133
import org.springframework.cloud.kubernetes.commons.KubernetesCommonsAutoConfiguration;
3234
import org.springframework.context.annotation.Bean;
3335
import org.springframework.context.annotation.Configuration;
36+
import org.springframework.context.event.ContextClosedEvent;
37+
import org.springframework.context.event.EventListener;
3438

3539
/**
3640
* Auto configuration for Kubernetes.
@@ -117,4 +121,11 @@ public Fabric8PodUtils kubernetesPodUtils(KubernetesClient client) {
117121
return new Fabric8PodUtils(client);
118122
}
119123

124+
@EventListener
125+
void onContextClosed(ContextClosedEvent event) {
126+
// Clean up any open connections from the KubernetesClient when the context is closed
127+
BeanFactoryUtils.beansOfTypeIncludingAncestors(event.getApplicationContext(), KubernetesClient.class).values()
128+
.forEach(Client::close);
129+
}
130+
120131
}

spring-cloud-kubernetes-fabric8-config/src/main/java/org/springframework/cloud/kubernetes/fabric8/config/Fabric8ConfigDataLocationResolver.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,7 @@ private KubernetesClient registerConfigAndClient(ConfigurableBootstrapContext bo
9393

9494
KubernetesClient kubernetesClient = new Fabric8AutoConfiguration().kubernetesClient(config);
9595
registerSingle(bootstrapContext, KubernetesClient.class, kubernetesClient, "configKubernetesClient",
96-
(ApplicationListener<ContextClosedEvent>) event -> {
97-
kubernetesClient.close();
98-
});
96+
(ApplicationListener<ContextClosedEvent>) event -> kubernetesClient.close());
9997
return kubernetesClient;
10098
}
10199

0 commit comments

Comments
 (0)