package org.springframework.cloud.netflix.turbine.stream; import java.util.HashMap; import java.util.Map; import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent; import org.springframework.context.ApplicationListener; import org.springframework.core.env.MapPropertySource; public class TurbinePortApplicationListener implements ApplicationListener<ApplicationEnvironmentPreparedEvent> { @Override public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) { Integer serverPort = event.getEnvironment().getProperty("server.port", Integer.class); Integer managementPort = event.getEnvironment().getProperty("management.port", Integer.class); Integer turbinePort = event.getEnvironment().getProperty("turbine.stream.port", Integer.class); if (serverPort == null && managementPort == null) { return; } if (serverPort != Integer.valueOf(-1)) { Map<String, Object> ports = new HashMap<String, Object>(); if (turbinePort == null) { // The actual server.port used by the application forced to be -1 (no user // endpoints) because no value was provided for turbine ports.put("server.port", -1); if (serverPort != null) { // Turbine port defaults to server port value supplied by user ports.put("turbine.stream.port", serverPort); } } else if (managementPort != null && managementPort != -1 && serverPort == null) { // User wants 2 ports, but hasn't specified server.port explicitly ports.put("server.port", managementPort); } event.getEnvironment().getPropertySources() .addFirst(new MapPropertySource("ports", ports)); } } }