Skip to content

Commit b310bab

Browse files
authored
Merge pull request #2022 from wind57/move_blocking_bean_to_separate_configuration
move blocking health bean to a separate configuration
2 parents ae10e54 + e0d2999 commit b310bab

File tree

4 files changed

+64
-40
lines changed

4 files changed

+64
-40
lines changed

spring-cloud-kubernetes-client-discovery/src/main/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesInformerDiscoveryClientAutoConfiguration.java

Lines changed: 3 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import io.kubernetes.client.informer.cache.Lister;
2424
import io.kubernetes.client.openapi.models.V1Endpoints;
2525
import io.kubernetes.client.openapi.models.V1Service;
26-
import org.apache.commons.logging.LogFactory;
2726

2827
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
2928
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
@@ -32,17 +31,14 @@
3231
import org.springframework.cloud.client.discovery.simple.SimpleDiscoveryClientAutoConfiguration;
3332
import org.springframework.cloud.kubernetes.client.KubernetesClientAutoConfiguration;
3433
import org.springframework.cloud.kubernetes.commons.KubernetesNamespaceProvider;
35-
import org.springframework.cloud.kubernetes.commons.PodUtils;
3634
import org.springframework.cloud.kubernetes.commons.discovery.ConditionalOnSpringCloudKubernetesBlockingDiscovery;
37-
import org.springframework.cloud.kubernetes.commons.discovery.ConditionalOnSpringCloudKubernetesBlockingDiscoveryHealthInitializer;
38-
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryClientHealthIndicatorInitializer;
35+
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryClientHealthConfiguration;
3936
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties;
4037
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryPropertiesAutoConfiguration;
41-
import org.springframework.context.ApplicationEventPublisher;
4238
import org.springframework.context.annotation.Bean;
4339
import org.springframework.context.annotation.Conditional;
4440
import org.springframework.context.annotation.Configuration;
45-
import org.springframework.core.log.LogAccessor;
41+
import org.springframework.context.annotation.Import;
4642

4743
/**
4844
* @author wind57
@@ -53,11 +49,9 @@
5349
@AutoConfigureAfter({ KubernetesClientAutoConfiguration.class, KubernetesDiscoveryPropertiesAutoConfiguration.class,
5450
KubernetesClientInformerAutoConfiguration.class,
5551
KubernetesClientInformerSelectiveNamespacesAutoConfiguration.class })
52+
@Import(KubernetesDiscoveryClientHealthConfiguration.class)
5653
public class KubernetesInformerDiscoveryClientAutoConfiguration {
5754

58-
private static final LogAccessor LOG = new LogAccessor(
59-
LogFactory.getLog(KubernetesInformerDiscoveryClientAutoConfiguration.class));
60-
6155
@Deprecated(forRemoval = true)
6256
public KubernetesInformerDiscoveryClient kubernetesInformerDiscoveryClient(
6357
KubernetesNamespaceProvider kubernetesNamespaceProvider, SharedInformerFactory sharedInformerFactory,
@@ -68,20 +62,6 @@ public KubernetesInformerDiscoveryClient kubernetesInformerDiscoveryClient(
6862
serviceLister, endpointsLister, serviceInformer, endpointsInformer, properties);
6963
}
7064

71-
/**
72-
* Creation of this bean triggers publishing an InstanceRegisteredEvent. In turn,
73-
* there is the CommonsClientAutoConfiguration::DiscoveryClientHealthIndicator, that
74-
* implements 'ApplicationListener' that will catch this event. It also registers a
75-
* bean of type DiscoveryClientHealthIndicator via ObjectProvider.
76-
*/
77-
@Bean
78-
@ConditionalOnSpringCloudKubernetesBlockingDiscoveryHealthInitializer
79-
public KubernetesDiscoveryClientHealthIndicatorInitializer indicatorInitializer(
80-
ApplicationEventPublisher applicationEventPublisher, PodUtils<?> podUtils) {
81-
LOG.debug(() -> "Will publish InstanceRegisteredEvent from blocking implementation");
82-
return new KubernetesDiscoveryClientHealthIndicatorInitializer(podUtils, applicationEventPublisher);
83-
}
84-
8565
@Bean
8666
@ConditionalOnMissingBean
8767
@Conditional(ConditionalOnSelectiveNamespacesMissing.class)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
* Copyright 2019-present the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.cloud.kubernetes.commons.discovery;
18+
19+
import org.apache.commons.logging.LogFactory;
20+
21+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
22+
import org.springframework.boot.health.contributor.HealthIndicator;
23+
import org.springframework.cloud.client.ConditionalOnDiscoveryHealthIndicatorEnabled;
24+
import org.springframework.cloud.kubernetes.commons.PodUtils;
25+
import org.springframework.context.ApplicationEventPublisher;
26+
import org.springframework.context.annotation.Bean;
27+
import org.springframework.context.annotation.Configuration;
28+
import org.springframework.core.log.LogAccessor;
29+
30+
/**
31+
* @author wind57
32+
*/
33+
@Configuration
34+
public class KubernetesDiscoveryClientHealthConfiguration {
35+
36+
private static final LogAccessor LOG = new LogAccessor(
37+
LogFactory.getLog(KubernetesDiscoveryClientHealthConfiguration.class));
38+
39+
@Bean
40+
@ConditionalOnClass({ HealthIndicator.class })
41+
@ConditionalOnDiscoveryHealthIndicatorEnabled
42+
public KubernetesDiscoveryClientHealthIndicatorInitializer indicatorInitializer(
43+
ApplicationEventPublisher applicationEventPublisher, PodUtils<?> podUtils) {
44+
45+
LOG.debug(() -> "Will publish InstanceRegisteredEvent from blocking implementation");
46+
return new KubernetesDiscoveryClientHealthIndicatorInitializer(podUtils, applicationEventPublisher);
47+
}
48+
49+
}

spring-cloud-kubernetes-commons/src/test/java/org/springframework/cloud/kubernetes/commons/KubernetesCommonsAutoConfigurationTests.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,13 @@
1717
package org.springframework.cloud.kubernetes.commons;
1818

1919
import org.junit.jupiter.api.Test;
20+
import org.mockito.Mockito;
2021

2122
import org.springframework.beans.factory.annotation.Autowired;
2223
import org.springframework.boot.autoconfigure.SpringBootApplication;
2324
import org.springframework.boot.test.context.SpringBootTest;
2425
import org.springframework.context.ConfigurableApplicationContext;
26+
import org.springframework.context.annotation.Bean;
2527

2628
import static org.assertj.core.api.Assertions.assertThat;
2729

@@ -50,6 +52,13 @@ void beansAreCreated() {
5052
@SpringBootApplication
5153
static class App {
5254

55+
@Bean
56+
public PodUtils<Object> podUtils() {
57+
PodUtils<Object> podUtils = Mockito.mock(PodUtils.class);
58+
Mockito.when(podUtils.currentPod()).thenReturn(Object::new);
59+
return podUtils;
60+
}
61+
5362
}
5463

5564
}

spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClientAutoConfiguration.java

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,26 +17,22 @@
1717
package org.springframework.cloud.kubernetes.fabric8.discovery;
1818

1919
import io.fabric8.kubernetes.client.KubernetesClient;
20-
import org.apache.commons.logging.LogFactory;
2120

2221
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
2322
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
2423
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2524
import org.springframework.cloud.client.CommonsClientAutoConfiguration;
2625
import org.springframework.cloud.client.discovery.simple.SimpleDiscoveryClientAutoConfiguration;
27-
import org.springframework.cloud.kubernetes.commons.PodUtils;
2826
import org.springframework.cloud.kubernetes.commons.discovery.ConditionalOnSpringCloudKubernetesBlockingDiscovery;
29-
import org.springframework.cloud.kubernetes.commons.discovery.ConditionalOnSpringCloudKubernetesBlockingDiscoveryHealthInitializer;
30-
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryClientHealthIndicatorInitializer;
27+
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryClientHealthConfiguration;
3128
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties;
3229
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryPropertiesAutoConfiguration;
3330
import org.springframework.cloud.kubernetes.commons.discovery.ServicePortSecureResolver;
3431
import org.springframework.cloud.kubernetes.fabric8.Fabric8AutoConfiguration;
35-
import org.springframework.context.ApplicationEventPublisher;
3632
import org.springframework.context.annotation.Bean;
3733
import org.springframework.context.annotation.Configuration;
34+
import org.springframework.context.annotation.Import;
3835
import org.springframework.core.env.Environment;
39-
import org.springframework.core.log.LogAccessor;
4036

4137
/**
4238
* Auto configuration for discovery clients.
@@ -48,11 +44,9 @@
4844
@ConditionalOnSpringCloudKubernetesBlockingDiscovery
4945
@AutoConfigureBefore({ SimpleDiscoveryClientAutoConfiguration.class, CommonsClientAutoConfiguration.class })
5046
@AutoConfigureAfter({ Fabric8AutoConfiguration.class, KubernetesDiscoveryPropertiesAutoConfiguration.class })
47+
@Import(KubernetesDiscoveryClientHealthConfiguration.class)
5148
public class KubernetesDiscoveryClientAutoConfiguration {
5249

53-
private static final LogAccessor LOG = new LogAccessor(
54-
LogFactory.getLog(KubernetesDiscoveryClientAutoConfiguration.class));
55-
5650
@Bean
5751
@ConditionalOnMissingBean
5852
public KubernetesClientServicesFunction servicesFunction(KubernetesDiscoveryProperties properties,
@@ -69,12 +63,4 @@ public KubernetesDiscoveryClient kubernetesDiscoveryClient(KubernetesClient clie
6963
new ServicePortSecureResolver(properties));
7064
}
7165

72-
@Bean
73-
@ConditionalOnSpringCloudKubernetesBlockingDiscoveryHealthInitializer
74-
public KubernetesDiscoveryClientHealthIndicatorInitializer indicatorInitializer(
75-
ApplicationEventPublisher applicationEventPublisher, PodUtils<?> podUtils) {
76-
LOG.debug(() -> "Will publish InstanceRegisteredEvent from blocking implementation");
77-
return new KubernetesDiscoveryClientHealthIndicatorInitializer(podUtils, applicationEventPublisher);
78-
}
79-
8066
}

0 commit comments

Comments
 (0)