Skip to content

Commit

Permalink
Detect dynamic mgmt port. Fixes spring-cloudgh-561
Browse files Browse the repository at this point in the history
  • Loading branch information
chriswhite199 committed May 1, 2019
1 parent 10e93d3 commit 841c183
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 18 deletions.
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 @@ -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

0 comments on commit 841c183

Please sign in to comment.