Merge pull request #120 from mabn/extendable_discovery_configuration
* basecrm-extendable_discovery_configuration: Allow customizable discovery configuration
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
package org.springframework.cloud.consul.config;
|
||||
|
||||
import com.ecwid.consul.v1.ConsulClient;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
@@ -47,8 +48,9 @@ public class ConsulConfigBootstrapConfiguration {
|
||||
}
|
||||
|
||||
@Bean
|
||||
public ConsulPropertySourceLocator consulPropertySourceLocator() {
|
||||
return new ConsulPropertySourceLocator(consul, consulConfigProperties());
|
||||
public ConsulPropertySourceLocator consulPropertySourceLocator(
|
||||
ConsulConfigProperties consulConfigProperties) {
|
||||
return new ConsulPropertySourceLocator(consul, consulConfigProperties);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
|
||||
package org.springframework.cloud.consul;
|
||||
|
||||
import com.ecwid.consul.v1.ConsulClient;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.actuate.endpoint.Endpoint;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
||||
@@ -25,8 +27,6 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import com.ecwid.consul.v1.ConsulClient;
|
||||
|
||||
/**
|
||||
* @author Spencer Gibb
|
||||
*/
|
||||
@@ -43,9 +43,8 @@ public class ConsulAutoConfiguration {
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
public ConsulClient consulClient() {
|
||||
return new ConsulClient(consulProperties().getHost(), consulProperties()
|
||||
.getPort());
|
||||
public ConsulClient consulClient(ConsulProperties consulProperties) {
|
||||
return new ConsulClient(consulProperties.getHost(), consulProperties.getPort());
|
||||
}
|
||||
|
||||
@Configuration
|
||||
|
||||
@@ -19,6 +19,7 @@ package org.springframework.cloud.consul.discovery;
|
||||
import com.ecwid.consul.v1.ConsulClient;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.boot.autoconfigure.web.ServerProperties;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
@@ -40,14 +41,17 @@ public class ConsulDiscoveryClientConfiguration {
|
||||
private ConsulClient consulClient;
|
||||
|
||||
@Bean
|
||||
public ConsulLifecycle consulLifecycle(ConsulDiscoveryProperties discoveryProperties) {
|
||||
return new ConsulLifecycle(consulClient, discoveryProperties, heartbeatProperties());
|
||||
@ConditionalOnMissingBean
|
||||
public ConsulLifecycle consulLifecycle(ConsulDiscoveryProperties discoveryProperties,
|
||||
HeartbeatProperties heartbeatProperties) {
|
||||
return new ConsulLifecycle(consulClient, discoveryProperties, heartbeatProperties);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
@ConditionalOnProperty("spring.cloud.consul.discovery.heartbeat.enabled")
|
||||
public TtlScheduler ttlScheduler() {
|
||||
return new TtlScheduler(heartbeatProperties(), consulClient);
|
||||
public TtlScheduler ttlScheduler(HeartbeatProperties heartbeatProperties) {
|
||||
return new TtlScheduler(heartbeatProperties, consulClient);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@@ -61,12 +65,18 @@ public class ConsulDiscoveryClientConfiguration {
|
||||
}
|
||||
|
||||
@Bean
|
||||
public ConsulDiscoveryClient consulDiscoveryClient(ServerProperties serverProperties, ConsulDiscoveryProperties discoveryProperties) {
|
||||
return new ConsulDiscoveryClient(consulClient, consulLifecycle(discoveryProperties), discoveryProperties, serverProperties);
|
||||
@ConditionalOnMissingBean
|
||||
public ConsulDiscoveryClient consulDiscoveryClient(ConsulLifecycle consulLifecycle,
|
||||
ServerProperties serverProperties,
|
||||
ConsulDiscoveryProperties discoveryProperties) {
|
||||
return new ConsulDiscoveryClient(consulClient, consulLifecycle,
|
||||
discoveryProperties, serverProperties);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public ConsulCatalogWatch consulCatalogWatch(ConsulDiscoveryProperties discoveryProperties) {
|
||||
@ConditionalOnMissingBean
|
||||
public ConsulCatalogWatch consulCatalogWatch(
|
||||
ConsulDiscoveryProperties discoveryProperties) {
|
||||
return new ConsulCatalogWatch(discoveryProperties, consulClient);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
/*
|
||||
* Copyright 2013-2015 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.cloud.consul.discovery;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.ecwid.consul.v1.ConsulClient;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
import org.springframework.boot.test.SpringApplicationConfiguration;
|
||||
import org.springframework.boot.test.WebIntegrationTest;
|
||||
import org.springframework.cloud.client.ServiceInstance;
|
||||
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
/**
|
||||
* @author Marcin Biegan
|
||||
*/
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@SpringApplicationConfiguration(classes = ConsulLifecycleCustomizedTests.MyTestConfig.class)
|
||||
@WebIntegrationTest(value = { "spring.application.name=testCustomLifecycle" }, randomPort = true)
|
||||
public class ConsulLifecycleCustomizedTests {
|
||||
|
||||
@Autowired
|
||||
private ConsulDiscoveryClient discoveryClient;
|
||||
@Autowired
|
||||
private ConsulLifecycle lifecycle1;
|
||||
@Autowired
|
||||
private CustomConsulLifecycle lifecycle2;
|
||||
|
||||
@Test
|
||||
public void getInstancesForServiceWorks() {
|
||||
List<ServiceInstance> instances = discoveryClient.getInstances("consul");
|
||||
assertNotNull("instances was null", instances);
|
||||
assertFalse("instances was empty", instances.isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void usesCustomConsulLifecycle() {
|
||||
assertEquals("serviceId is not customized", "foo", lifecycle1.getServiceId());
|
||||
assertEquals("serviceId is not customized", "foo", lifecycle2.getServiceId());
|
||||
}
|
||||
|
||||
@Configuration
|
||||
@EnableDiscoveryClient
|
||||
@EnableAutoConfiguration
|
||||
public static class MyTestConfig {
|
||||
@Bean
|
||||
public ConsulLifecycle customizedLifecycle(ConsulClient client,
|
||||
ConsulDiscoveryProperties properties, HeartbeatProperties ttlConfig) {
|
||||
return new CustomConsulLifecycle(client, properties, ttlConfig);
|
||||
}
|
||||
}
|
||||
|
||||
public static class CustomConsulLifecycle extends ConsulLifecycle {
|
||||
@Autowired
|
||||
public CustomConsulLifecycle(ConsulClient client,
|
||||
ConsulDiscoveryProperties properties, HeartbeatProperties ttlConfig) {
|
||||
super(client, properties, ttlConfig);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getServiceId() {
|
||||
return "foo";
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user