diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/EurekaStubsRegistrar.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/EurekaStubsRegistrar.java index b0e7402f9e..e12bc4c3af 100644 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/EurekaStubsRegistrar.java +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/EurekaStubsRegistrar.java @@ -7,10 +7,12 @@ import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.cloud.commons.util.InetUtils; import org.springframework.cloud.contract.stubrunner.StubConfiguration; import org.springframework.cloud.contract.stubrunner.StubRunning; import org.springframework.cloud.contract.stubrunner.spring.cloud.StubMapperProperties; import org.springframework.cloud.contract.stubrunner.spring.cloud.StubsRegistrar; +import org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean; import org.springframework.util.StringUtils; /** @@ -27,23 +29,32 @@ public class EurekaStubsRegistrar implements StubsRegistrar { private final StubRunning stubRunning; private final Eureka eurekaClient; private final StubMapperProperties stubMapperProperties; + private final InetUtils inetUtils; + private final EurekaInstanceConfigBean eurekaInstanceConfigBean; private final List discoveryList = new LinkedList<>(); public EurekaStubsRegistrar(StubRunning stubRunning, Eureka eureka, - StubMapperProperties stubMapperProperties) { + StubMapperProperties stubMapperProperties, InetUtils inetUtils, + EurekaInstanceConfigBean eurekaInstanceConfigBean) { this.stubRunning = stubRunning; this.stubMapperProperties = stubMapperProperties; this.eurekaClient = eureka; + this.inetUtils = inetUtils; + this.eurekaInstanceConfigBean = eurekaInstanceConfigBean; } @Override public void registerStubs() { Map activeStubs = this.stubRunning.runStubs() .validNamesAndPorts(); for (Map.Entry entry : activeStubs.entrySet()) { - Application application = new Application(name(entry.getKey()), entry.getKey().getArtifactId(), "localhost", entry.getValue()); + Application application = new Application(name(entry.getKey()), entry.getKey().getArtifactId(), + StringUtils.hasText(this.eurekaInstanceConfigBean.getHostname()) ? + this.eurekaInstanceConfigBean.getHostname() : + this.inetUtils.findFirstNonLoopbackAddress().getHostName(), entry.getValue()); try { Registration register = this.eurekaClient.register(application); - this.discoveryList.add(new Renewer(this.eurekaClient.clientConfig.getInstanceInfoReplicationIntervalSeconds() / 2, this.eurekaClient, register)); + this.discoveryList.add(new Renewer( + this.eurekaClient.clientConfig.getInstanceInfoReplicationIntervalSeconds() / 2, this.eurekaClient, register)); if (log.isDebugEnabled()) { log.debug("Successfully registered stub [" + entry.getKey().toColonSeparatedDependencyNotation() + "] in Service Discovery"); diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/StubRunnerSpringCloudEurekaAutoConfiguration.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/StubRunnerSpringCloudEurekaAutoConfiguration.java index 411e8d9b52..ca66fc3e17 100644 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/StubRunnerSpringCloudEurekaAutoConfiguration.java +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/StubRunnerSpringCloudEurekaAutoConfiguration.java @@ -28,6 +28,7 @@ import org.springframework.cloud.contract.stubrunner.spring.cloud.StubsRegistrar import org.springframework.cloud.netflix.eureka.CloudEurekaClient; import org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration; import org.springframework.cloud.netflix.eureka.EurekaClientConfigBean; +import org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -52,13 +53,14 @@ public class StubRunnerSpringCloudEurekaAutoConfiguration { @Bean(initMethod = "registerStubs") public StubsRegistrar stubsRegistrar(StubRunning stubRunning, Eureka eureka, - StubMapperProperties stubMapperProperties) { - return new EurekaStubsRegistrar(stubRunning, eureka, stubMapperProperties); + StubMapperProperties stubMapperProperties, InetUtils inetUtils, EurekaInstanceConfigBean eurekaInstanceConfigBean) { + return new EurekaStubsRegistrar(stubRunning, eureka, stubMapperProperties, inetUtils, eurekaInstanceConfigBean); } @Bean(name = "eurekaRegistrar") public Eureka eureka(InetUtils inetUtils, ApplicationInfoManager manager, - EurekaClientConfig config, ApplicationContext applicationContext, EurekaClientConfigBean eurekaClientConfigBean) { + EurekaClientConfig config, ApplicationContext applicationContext, + EurekaClientConfigBean eurekaClientConfigBean) { return new Eureka(inetUtils, eurekaClientConfigBean, new CloudEurekaClient(manager, config, applicationContext)); } }