diff --git a/spring-cloud-kubernetes-fabric8-autoconfig/src/main/java/org/springframework/cloud/kubernetes/fabric8/Fabric8AutoConfiguration.java b/spring-cloud-kubernetes-fabric8-autoconfig/src/main/java/org/springframework/cloud/kubernetes/fabric8/Fabric8AutoConfiguration.java index 509be0d32b..93b2fa94a7 100644 --- a/spring-cloud-kubernetes-fabric8-autoconfig/src/main/java/org/springframework/cloud/kubernetes/fabric8/Fabric8AutoConfiguration.java +++ b/spring-cloud-kubernetes-fabric8-autoconfig/src/main/java/org/springframework/cloud/kubernetes/fabric8/Fabric8AutoConfiguration.java @@ -22,13 +22,16 @@ import io.fabric8.kubernetes.client.ConfigBuilder; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.KubernetesClientBuilder; +import jakarta.annotation.PreDestroy; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnCloudPlatform; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.cloud.CloudPlatform; import org.springframework.cloud.kubernetes.commons.KubernetesClientProperties; import org.springframework.cloud.kubernetes.commons.KubernetesCommonsAutoConfiguration; +import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -44,6 +47,9 @@ @AutoConfigureAfter(KubernetesCommonsAutoConfiguration.class) public class Fabric8AutoConfiguration { + @Autowired + private ApplicationContext context; + private static D or(D left, D right) { return left != null ? left : right; } @@ -52,10 +58,6 @@ private static Integer orDurationInt(Duration left, Integer right) { return left != null ? (int) left.toMillis() : right; } - private static Long orDurationLong(Duration left, Long right) { - return left != null ? left.toMillis() : right; - } - @Bean @ConditionalOnMissingBean(Config.class) public Config kubernetesClientConfig(KubernetesClientProperties kubernetesClientProperties) { @@ -117,4 +119,15 @@ public Fabric8PodUtils kubernetesPodUtils(KubernetesClient client) { return new Fabric8PodUtils(client); } + @PreDestroy + void preDestroy() { + context.getBeansOfType(KubernetesClient.class).values().forEach(KubernetesClient::close); + + // in case of bootstrap + ApplicationContext parent = context.getParent(); + if (parent != null) { + parent.getBeansOfType(KubernetesClient.class).values().forEach(KubernetesClient::close); + } + } + }