Skip to content

Commit

Permalink
Detect dynamic mgmt port. Fixes gh-561
Browse files Browse the repository at this point in the history
  • Loading branch information
chriswhite199 committed May 1, 2019
1 parent 10e93d3 commit 20ebfc6
Show file tree
Hide file tree
Showing 28 changed files with 94 additions and 58 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -60,15 +60,19 @@ public class CommonsClientAutoConfiguration {
protected static class DiscoveryLoadBalancerConfiguration {

@Bean
@ConditionalOnProperty(value = "spring.cloud.discovery.client.health-indicator.enabled", matchIfMissing = true)
@ConditionalOnProperty(
value = "spring.cloud.discovery.client.health-indicator.enabled",
matchIfMissing = true)
public DiscoveryClientHealthIndicator discoveryClientHealthIndicator(
ObjectProvider<DiscoveryClient> discoveryClient,
DiscoveryClientHealthIndicatorProperties properties) {
return new DiscoveryClientHealthIndicator(discoveryClient, properties);
}

@Bean
@ConditionalOnProperty(value = "spring.cloud.discovery.client.composite-indicator.enabled", matchIfMissing = true)
@ConditionalOnProperty(
value = "spring.cloud.discovery.client.composite-indicator.enabled",
matchIfMissing = true)
@ConditionalOnBean({ DiscoveryHealthIndicator.class, HealthAggregator.class })
public DiscoveryCompositeHealthIndicator discoveryCompositeHealthIndicator(
HealthAggregator aggregator, List<DiscoveryHealthIndicator> indicators) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,17 @@
import org.apache.commons.logging.LogFactory;

import org.springframework.beans.BeansException;
import org.springframework.boot.web.context.ConfigurableWebServerApplicationContext;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.boot.web.context.WebServerInitializedEvent;
import org.springframework.cloud.client.discovery.ManagementServerPortUtils;
import org.springframework.cloud.client.discovery.event.InstancePreRegisteredEvent;
import org.springframework.cloud.client.discovery.event.InstanceRegisteredEvent;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.core.env.Environment;
import org.springframework.util.StringUtils;

/**
* Lifecycle methods that may be useful and common to {@link ServiceRegistry}
Expand All @@ -43,10 +45,11 @@
*
* @param <R> Registration type passed to the {@link ServiceRegistry}.
* @author Spencer Gibb
* @author Chris White
*/
public abstract class AbstractAutoServiceRegistration<R extends Registration>
implements AutoServiceRegistration, ApplicationContextAware,
ApplicationListener<WebServerInitializedEvent> {
ApplicationListener<ApplicationEvent> {

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

private AtomicInteger port = new AtomicInteger(0);

private AtomicInteger mgmtPort = new AtomicInteger(0);

private AutoServiceRegistrationProperties properties;

@Deprecated
Expand All @@ -83,22 +88,25 @@ protected ApplicationContext getContext() {
}

@Override
@SuppressWarnings("deprecation")
public void onApplicationEvent(WebServerInitializedEvent event) {
bind(event);
public void onApplicationEvent(ApplicationEvent event) {
if (event instanceof ApplicationReadyEvent) {
this.start();
}
else if (event instanceof WebServerInitializedEvent) {
this.bind((WebServerInitializedEvent) event);
}
}

@Deprecated
public void bind(WebServerInitializedEvent event) {
ApplicationContext context = event.getApplicationContext();
if (context instanceof ConfigurableWebServerApplicationContext) {
if ("management".equals(((ConfigurableWebServerApplicationContext) context)
.getServerNamespace())) {
return;
}
String serverNamespace = event.getApplicationContext().getServerNamespace();

if (StringUtils.isEmpty(serverNamespace)) {
this.port.compareAndSet(0, event.getWebServer().getPort());
}
else if ("management".equals(serverNamespace)) {
this.mgmtPort.compareAndSet(0, event.getWebServer().getPort());
}
this.port.compareAndSet(0, event.getWebServer().getPort());
this.start();
}

@Override
Expand Down Expand Up @@ -192,7 +200,12 @@ protected String getManagementServiceName() {
*/
@Deprecated
protected Integer getManagementPort() {
return ManagementServerPortUtils.getPort(this.context);
if (this.mgmtPort.get() != 0) {
return this.mgmtPort.get();
}
else {
return ManagementServerPortUtils.getPort(this.context);
}
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@
*/
@Configuration
@Import(AutoServiceRegistrationConfiguration.class)
@ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled", matchIfMissing = true)
@ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled",
matchIfMissing = true)
public class AutoServiceRegistrationAutoConfiguration {

@Autowired(required = false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@
*/
@Configuration
@EnableConfigurationProperties(AutoServiceRegistrationProperties.class)
@ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled", matchIfMissing = true)
@ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled",
matchIfMissing = true)
public class AutoServiceRegistrationConfiguration {

}
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@
public class HttpClientConfiguration {

@Configuration
@ConditionalOnProperty(name = "spring.cloud.httpclientfactories.apache.enabled", matchIfMissing = true)
@ConditionalOnProperty(name = "spring.cloud.httpclientfactories.apache.enabled",
matchIfMissing = true)
@ConditionalOnClass(HttpClient.class)
static class ApacheHttpClientConfiguration {

Expand All @@ -59,7 +60,8 @@ public ApacheHttpClientFactory apacheHttpClientFactory(
}

@Configuration
@ConditionalOnProperty(name = "spring.cloud.httpclientfactories.ok.enabled", matchIfMissing = true)
@ConditionalOnProperty(name = "spring.cloud.httpclientfactories.ok.enabled",
matchIfMissing = true)
@ConditionalOnClass(OkHttpClient.class)
static class OkHttpClientConfiguration {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@
* @since 1.3.6
*/
@Configuration
@ConditionalOnProperty(value = "spring.cloud.compatibility-verifier.enabled", matchIfMissing = true)
@ConditionalOnProperty(value = "spring.cloud.compatibility-verifier.enabled",
matchIfMissing = true)
@AutoConfigureOrder(0)
@EnableConfigurationProperties(CompatibilityVerifierProperties.class)
public class CompatibilityVerifierAutoConfiguration {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@
* @author Ryan Baxter
*/
@RunWith(SpringRunner.class)
@SpringBootTest(properties = {
"spring.cloud.service-registry.auto-registration.enabled: false" })
@SpringBootTest(
properties = { "spring.cloud.service-registry.auto-registration.enabled: false" })
public class AutoRegisterPropertyFalseTests {

@Autowired(required = false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@
* @author Olga Maciaszek-Sharma
*/
@RunWith(SpringRunner.class)
@SpringBootTest(properties = "spring.cloud.discovery.client.simple.order:2", classes = {
CompositeDiscoveryClientTestsConfig.class })
@SpringBootTest(properties = "spring.cloud.discovery.client.simple.order:2",
classes = { CompositeDiscoveryClientTestsConfig.class })
public class CompositeDiscoveryClientOrderTest {

@Autowired
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@
"spring.cloud.discovery.client.simple.instances.service1[0].uri=http://s11:8080",
"spring.cloud.discovery.client.simple.instances.service1[1].uri=https://s12:8443",
"spring.cloud.discovery.client.simple.instances.service2[0].uri=https://s21:8080",
"spring.cloud.discovery.client.simple.instances.service2[1].uri=https://s22:443" }, classes = {
CompositeDiscoveryClientTestsConfig.class })
"spring.cloud.discovery.client.simple.instances.service2[1].uri=https://s22:443" },
classes = { CompositeDiscoveryClientTestsConfig.class })
public class CompositeDiscoveryClientTests {

@Autowired
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,10 @@
*/
@RunWith(SpringRunner.class)
// @checkstyle:off
@SpringBootTest(classes = { DiscoveryClientHealthIndicatorTests.Config.class,
CommonsClientAutoConfiguration.class }, properties = "spring.cloud.discovery.client.health-indicator.include-description:true")
@SpringBootTest(
classes = { DiscoveryClientHealthIndicatorTests.Config.class,
CommonsClientAutoConfiguration.class },
properties = "spring.cloud.discovery.client.health-indicator.include-description:true")
// @checkstyle:on
public class DiscoveryClientHealthIndicatorTests {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,10 @@
* @author Tim Ysewyn
*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = AbstractAutoServiceRegistrationMgmtDisabledTests.Config.class, properties = {
"management.port=0",
"spring.cloud.service-registry.auto-registration.register-management=false" }, webEnvironment = RANDOM_PORT)
@SpringBootTest(classes = AbstractAutoServiceRegistrationMgmtDisabledTests.Config.class,
properties = { "management.server.port=0",
"spring.cloud.service-registry.auto-registration.register-management=false" },
webEnvironment = RANDOM_PORT)
public class AbstractAutoServiceRegistrationMgmtDisabledTests {

@Autowired
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@
*/
@RunWith(SpringRunner.class)
// @checkstyle:off
@SpringBootTest(classes = AbstractAutoServiceRegistrationTests.Config.class, properties = "management.port=0", webEnvironment = RANDOM_PORT)
@SpringBootTest(classes = AbstractAutoServiceRegistrationTests.Config.class,
properties = "management.server.port=0", webEnvironment = RANDOM_PORT)
// @checkstyle:on
public class AbstractAutoServiceRegistrationTests {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@
* @author Spencer Gibb
*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = ServiceRegistryEndpointNoRegistrationTests.TestConfiguration.class)
@SpringBootTest(
classes = ServiceRegistryEndpointNoRegistrationTests.TestConfiguration.class)
@AutoConfigureMockMvc
public class ServiceRegistryEndpointNoRegistrationTests {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@
*/
@RunWith(SpringRunner.class)
// @checkstyle:off
@SpringBootTest(classes = ServiceRegistryEndpointTests.TestConfiguration.class, properties = "management.endpoints.web.exposure.include=*")
@SpringBootTest(classes = ServiceRegistryEndpointTests.TestConfiguration.class,
properties = "management.endpoints.web.exposure.include=*")
// @checkstyle:on
@AutoConfigureMockMvc
public class ServiceRegistryEndpointTests {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@
* @author Ryan Baxter
*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = CustomApplication.class, properties = {
"spring.cloud.httpclient.ok.enabled: true" })
@SpringBootTest(classes = CustomApplication.class,
properties = { "spring.cloud.httpclient.ok.enabled: true" })
public class CustomHttpClientConfigurationTests {

@Autowired
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@
* @author Ryan Baxter
*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = MyApplication.class, properties = {
"spring.cloud.httpclient.ok.enabled: true" })
@SpringBootTest(classes = MyApplication.class,
properties = { "spring.cloud.httpclient.ok.enabled: true" })
public class DefaultHttpClientConfigurationTests {

@Autowired
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,8 @@
*/
@Configuration
@ConditionalOnClass(RefreshScope.class)
@ConditionalOnProperty(name = RefreshAutoConfiguration.REFRESH_SCOPE_ENABLED, matchIfMissing = true)
@ConditionalOnProperty(name = RefreshAutoConfiguration.REFRESH_SCOPE_ENABLED,
matchIfMissing = true)
@AutoConfigureBefore(HibernateJpaAutoConfiguration.class)
public class RefreshAutoConfiguration {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,8 @@
@AutoConfigureBefore(EnvironmentEndpointAutoConfiguration.class)
@AutoConfigureAfter(LifecycleMvcEndpointAutoConfiguration.class)
@EnableConfigurationProperties({ EnvironmentEndpointProperties.class })
@ConditionalOnProperty(value = "management.endpoint.env.post.enabled", matchIfMissing = true)
@ConditionalOnProperty(value = "management.endpoint.env.post.enabled",
matchIfMissing = true)
public class WritableEnvironmentEndpointAutoConfiguration {

private final EnvironmentEndpointProperties properties;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@
import static org.assertj.core.api.BDDAssertions.then;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class, properties = "spring.cloud.bootstrap.enabled:false")
@SpringBootTest(classes = Application.class,
properties = "spring.cloud.bootstrap.enabled:false")
public class BootstrapDisabledAutoConfigurationIntegrationTests {

@Autowired
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@
import static org.assertj.core.api.BDDAssertions.then;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class, properties = { "encrypt.key:deadbeef",
"spring.cloud.bootstrap.name:custom" })
@SpringBootTest(classes = Application.class,
properties = { "encrypt.key:deadbeef", "spring.cloud.bootstrap.name:custom" })
@ActiveProfiles("encrypt")
public class BootstrapOrderingCustomPropertySourceIntegrationTests {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@
import static org.assertj.core.api.BDDAssertions.then;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class, properties = "spring.cloud.bootstrap.name:json")
@SpringBootTest(classes = Application.class,
properties = "spring.cloud.bootstrap.name:json")
public class BootstrapOrderingSpringApplicationJsonIntegrationTests {

@Autowired
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestConfiguration.class, properties = "management.endpoints.web.exposure.include=*")
@SpringBootTest(classes = TestConfiguration.class,
properties = "management.endpoints.web.exposure.include=*")
@AutoConfigureMockMvc
public class EnvironmentManagerIntegrationTests {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@
import static org.assertj.core.api.BDDAssertions.then;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestConfiguration.class, properties = {
"messages.expiry.one=168", "messages.expiry.two=76" })
@SpringBootTest(classes = TestConfiguration.class,
properties = { "messages.expiry.one=168", "messages.expiry.two=76" })
public class ConfigurationPropertiesRebinderProxyIntegrationTests {

@Autowired
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@
import static org.assertj.core.api.BDDAssertions.then;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestConfiguration.class, properties = {
"spring.datasource.hikari.read-only=false" })
@SpringBootTest(classes = TestConfiguration.class,
properties = { "spring.datasource.hikari.read-only=false" })
public class ContextRefresherIntegrationTests {

@Autowired
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,9 @@
*
*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = ClientApp.class, properties = {
"management.endpoints.web.exposure.include=*" }, webEnvironment = RANDOM_PORT)
@SpringBootTest(classes = ClientApp.class,
properties = { "management.endpoints.web.exposure.include=*" },
webEnvironment = RANDOM_PORT)
public class RefreshEndpointIntegrationTests {

private static final String BASE_PATH = new WebEndpointProperties().getBasePath();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@
import static org.assertj.core.api.BDDAssertions.then;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestConfiguration.class, properties = { "test.messages[0]=one",
"test.messages[1]=two" })
@SpringBootTest(classes = TestConfiguration.class,
properties = { "test.messages[0]=one", "test.messages[1]=two" })
public class RefreshScopeListBindingIntegrationTests {

@Autowired
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@
import static org.assertj.core.api.BDDAssertions.then;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {
RefreshScopeNullBeanIntegrationTests.TestConfiguration.class })
@SpringBootTest(
classes = { RefreshScopeNullBeanIntegrationTests.TestConfiguration.class })
public class RefreshScopeNullBeanIntegrationTests {

@Autowired
Expand Down
Loading

0 comments on commit 20ebfc6

Please sign in to comment.