Skip to content

Commit 20ebfc6

Browse files
committed
Detect dynamic mgmt port. Fixes gh-561
1 parent 10e93d3 commit 20ebfc6

File tree

28 files changed

+94
-58
lines changed

28 files changed

+94
-58
lines changed

spring-cloud-commons/src/main/java/org/springframework/cloud/client/CommonsClientAutoConfiguration.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,15 +60,19 @@ public class CommonsClientAutoConfiguration {
6060
protected static class DiscoveryLoadBalancerConfiguration {
6161

6262
@Bean
63-
@ConditionalOnProperty(value = "spring.cloud.discovery.client.health-indicator.enabled", matchIfMissing = true)
63+
@ConditionalOnProperty(
64+
value = "spring.cloud.discovery.client.health-indicator.enabled",
65+
matchIfMissing = true)
6466
public DiscoveryClientHealthIndicator discoveryClientHealthIndicator(
6567
ObjectProvider<DiscoveryClient> discoveryClient,
6668
DiscoveryClientHealthIndicatorProperties properties) {
6769
return new DiscoveryClientHealthIndicator(discoveryClient, properties);
6870
}
6971

7072
@Bean
71-
@ConditionalOnProperty(value = "spring.cloud.discovery.client.composite-indicator.enabled", matchIfMissing = true)
73+
@ConditionalOnProperty(
74+
value = "spring.cloud.discovery.client.composite-indicator.enabled",
75+
matchIfMissing = true)
7276
@ConditionalOnBean({ DiscoveryHealthIndicator.class, HealthAggregator.class })
7377
public DiscoveryCompositeHealthIndicator discoveryCompositeHealthIndicator(
7478
HealthAggregator aggregator, List<DiscoveryHealthIndicator> indicators) {

spring-cloud-commons/src/main/java/org/springframework/cloud/client/serviceregistry/AbstractAutoServiceRegistration.java

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,17 @@
2525
import org.apache.commons.logging.LogFactory;
2626

2727
import org.springframework.beans.BeansException;
28-
import org.springframework.boot.web.context.ConfigurableWebServerApplicationContext;
28+
import org.springframework.boot.context.event.ApplicationReadyEvent;
2929
import org.springframework.boot.web.context.WebServerInitializedEvent;
3030
import org.springframework.cloud.client.discovery.ManagementServerPortUtils;
3131
import org.springframework.cloud.client.discovery.event.InstancePreRegisteredEvent;
3232
import org.springframework.cloud.client.discovery.event.InstanceRegisteredEvent;
3333
import org.springframework.context.ApplicationContext;
3434
import org.springframework.context.ApplicationContextAware;
35+
import org.springframework.context.ApplicationEvent;
3536
import org.springframework.context.ApplicationListener;
3637
import org.springframework.core.env.Environment;
38+
import org.springframework.util.StringUtils;
3739

3840
/**
3941
* Lifecycle methods that may be useful and common to {@link ServiceRegistry}
@@ -43,10 +45,11 @@
4345
*
4446
* @param <R> Registration type passed to the {@link ServiceRegistry}.
4547
* @author Spencer Gibb
48+
* @author Chris White
4649
*/
4750
public abstract class AbstractAutoServiceRegistration<R extends Registration>
4851
implements AutoServiceRegistration, ApplicationContextAware,
49-
ApplicationListener<WebServerInitializedEvent> {
52+
ApplicationListener<ApplicationEvent> {
5053

5154
private static final Log logger = LogFactory
5255
.getLog(AbstractAutoServiceRegistration.class);
@@ -65,6 +68,8 @@ public abstract class AbstractAutoServiceRegistration<R extends Registration>
6568

6669
private AtomicInteger port = new AtomicInteger(0);
6770

71+
private AtomicInteger mgmtPort = new AtomicInteger(0);
72+
6873
private AutoServiceRegistrationProperties properties;
6974

7075
@Deprecated
@@ -83,22 +88,25 @@ protected ApplicationContext getContext() {
8388
}
8489

8590
@Override
86-
@SuppressWarnings("deprecation")
87-
public void onApplicationEvent(WebServerInitializedEvent event) {
88-
bind(event);
91+
public void onApplicationEvent(ApplicationEvent event) {
92+
if (event instanceof ApplicationReadyEvent) {
93+
this.start();
94+
}
95+
else if (event instanceof WebServerInitializedEvent) {
96+
this.bind((WebServerInitializedEvent) event);
97+
}
8998
}
9099

91100
@Deprecated
92101
public void bind(WebServerInitializedEvent event) {
93-
ApplicationContext context = event.getApplicationContext();
94-
if (context instanceof ConfigurableWebServerApplicationContext) {
95-
if ("management".equals(((ConfigurableWebServerApplicationContext) context)
96-
.getServerNamespace())) {
97-
return;
98-
}
102+
String serverNamespace = event.getApplicationContext().getServerNamespace();
103+
104+
if (StringUtils.isEmpty(serverNamespace)) {
105+
this.port.compareAndSet(0, event.getWebServer().getPort());
106+
}
107+
else if ("management".equals(serverNamespace)) {
108+
this.mgmtPort.compareAndSet(0, event.getWebServer().getPort());
99109
}
100-
this.port.compareAndSet(0, event.getWebServer().getPort());
101-
this.start();
102110
}
103111

104112
@Override
@@ -192,7 +200,12 @@ protected String getManagementServiceName() {
192200
*/
193201
@Deprecated
194202
protected Integer getManagementPort() {
195-
return ManagementServerPortUtils.getPort(this.context);
203+
if (this.mgmtPort.get() != 0) {
204+
return this.mgmtPort.get();
205+
}
206+
else {
207+
return ManagementServerPortUtils.getPort(this.context);
208+
}
196209
}
197210

198211
/**

spring-cloud-commons/src/main/java/org/springframework/cloud/client/serviceregistry/AutoServiceRegistrationAutoConfiguration.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@
2828
*/
2929
@Configuration
3030
@Import(AutoServiceRegistrationConfiguration.class)
31-
@ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled", matchIfMissing = true)
31+
@ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled",
32+
matchIfMissing = true)
3233
public class AutoServiceRegistrationAutoConfiguration {
3334

3435
@Autowired(required = false)

spring-cloud-commons/src/main/java/org/springframework/cloud/client/serviceregistry/AutoServiceRegistrationConfiguration.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@
2525
*/
2626
@Configuration
2727
@EnableConfigurationProperties(AutoServiceRegistrationProperties.class)
28-
@ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled", matchIfMissing = true)
28+
@ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled",
29+
matchIfMissing = true)
2930
public class AutoServiceRegistrationConfiguration {
3031

3132
}

spring-cloud-commons/src/main/java/org/springframework/cloud/commons/httpclient/HttpClientConfiguration.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@
3333
public class HttpClientConfiguration {
3434

3535
@Configuration
36-
@ConditionalOnProperty(name = "spring.cloud.httpclientfactories.apache.enabled", matchIfMissing = true)
36+
@ConditionalOnProperty(name = "spring.cloud.httpclientfactories.apache.enabled",
37+
matchIfMissing = true)
3738
@ConditionalOnClass(HttpClient.class)
3839
static class ApacheHttpClientConfiguration {
3940

@@ -59,7 +60,8 @@ public ApacheHttpClientFactory apacheHttpClientFactory(
5960
}
6061

6162
@Configuration
62-
@ConditionalOnProperty(name = "spring.cloud.httpclientfactories.ok.enabled", matchIfMissing = true)
63+
@ConditionalOnProperty(name = "spring.cloud.httpclientfactories.ok.enabled",
64+
matchIfMissing = true)
6365
@ConditionalOnClass(OkHttpClient.class)
6466
static class OkHttpClientConfiguration {
6567

spring-cloud-commons/src/main/java/org/springframework/cloud/configuration/CompatibilityVerifierAutoConfiguration.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@
3333
* @since 1.3.6
3434
*/
3535
@Configuration
36-
@ConditionalOnProperty(value = "spring.cloud.compatibility-verifier.enabled", matchIfMissing = true)
36+
@ConditionalOnProperty(value = "spring.cloud.compatibility-verifier.enabled",
37+
matchIfMissing = true)
3738
@AutoConfigureOrder(0)
3839
@EnableConfigurationProperties(CompatibilityVerifierProperties.class)
3940
public class CompatibilityVerifierAutoConfiguration {

spring-cloud-commons/src/test/java/org/springframework/cloud/client/discovery/AutoRegisterPropertyFalseTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@
3535
* @author Ryan Baxter
3636
*/
3737
@RunWith(SpringRunner.class)
38-
@SpringBootTest(properties = {
39-
"spring.cloud.service-registry.auto-registration.enabled: false" })
38+
@SpringBootTest(
39+
properties = { "spring.cloud.service-registry.auto-registration.enabled: false" })
4040
public class AutoRegisterPropertyFalseTests {
4141

4242
@Autowired(required = false)

spring-cloud-commons/src/test/java/org/springframework/cloud/client/discovery/composite/CompositeDiscoveryClientOrderTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@
4040
* @author Olga Maciaszek-Sharma
4141
*/
4242
@RunWith(SpringRunner.class)
43-
@SpringBootTest(properties = "spring.cloud.discovery.client.simple.order:2", classes = {
44-
CompositeDiscoveryClientTestsConfig.class })
43+
@SpringBootTest(properties = "spring.cloud.discovery.client.simple.order:2",
44+
classes = { CompositeDiscoveryClientTestsConfig.class })
4545
public class CompositeDiscoveryClientOrderTest {
4646

4747
@Autowired

spring-cloud-commons/src/test/java/org/springframework/cloud/client/discovery/composite/CompositeDiscoveryClientTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@
4141
"spring.cloud.discovery.client.simple.instances.service1[0].uri=http://s11:8080",
4242
"spring.cloud.discovery.client.simple.instances.service1[1].uri=https://s12:8443",
4343
"spring.cloud.discovery.client.simple.instances.service2[0].uri=https://s21:8080",
44-
"spring.cloud.discovery.client.simple.instances.service2[1].uri=https://s22:443" }, classes = {
45-
CompositeDiscoveryClientTestsConfig.class })
44+
"spring.cloud.discovery.client.simple.instances.service2[1].uri=https://s22:443" },
45+
classes = { CompositeDiscoveryClientTestsConfig.class })
4646
public class CompositeDiscoveryClientTests {
4747

4848
@Autowired

spring-cloud-commons/src/test/java/org/springframework/cloud/client/discovery/health/DiscoveryClientHealthIndicatorTests.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,10 @@
4444
*/
4545
@RunWith(SpringRunner.class)
4646
// @checkstyle:off
47-
@SpringBootTest(classes = { DiscoveryClientHealthIndicatorTests.Config.class,
48-
CommonsClientAutoConfiguration.class }, properties = "spring.cloud.discovery.client.health-indicator.include-description:true")
47+
@SpringBootTest(
48+
classes = { DiscoveryClientHealthIndicatorTests.Config.class,
49+
CommonsClientAutoConfiguration.class },
50+
properties = "spring.cloud.discovery.client.health-indicator.include-description:true")
4951
// @checkstyle:on
5052
public class DiscoveryClientHealthIndicatorTests {
5153

0 commit comments

Comments
 (0)