diff --git a/docs/src/main/asciidoc/spring-cloud-netflix.adoc b/docs/src/main/asciidoc/spring-cloud-netflix.adoc
index d25f0e42..519ce5ab 100644
--- a/docs/src/main/asciidoc/spring-cloud-netflix.adoc
+++ b/docs/src/main/asciidoc/spring-cloud-netflix.adoc
@@ -19,7 +19,7 @@ Service Discovery is one of the key tenets of a microservice based architecture.
=== How to Include Eureka Client
To include Eureka Client in your project use the starter with group `org.springframework.cloud`
-and artifact id `spring-cloud-starter-eureka`. See the http://projects.spring.io/spring-cloud/[Spring Cloud Project page]
+and artifact id `spring-cloud-starter-netflix-eureka-client`. See the http://projects.spring.io/spring-cloud/[Spring Cloud Project page]
for details on setting up your build system with the current Spring Cloud Release Train.
=== Registering with Eureka
@@ -264,6 +264,34 @@ not be started yet). It is initialized in a `SmartLifecycle` (with
another `SmartLifecycle` with higher phase.
====
+==== EurekaClient without Jersey
+
+By default, EurekaClient uses Jersey for HTTP communication. If you wish
+to avoid dependencies from Jersey, you can exclude it from your dependencies.
+Spring Cloud will auto configure a transport client based on Spring
+`RestTemplate`.
+
+----
+
+ org.springframework.cloud
+ spring-cloud-starter-eureka
+
+
+ com.sun.jersey
+ jersey-client
+
+
+ com.sun.jersey
+ jersey-core
+
+
+ com.sun.jersey.contribs
+ jersey-apache-client4
+
+
+
+----
+
=== Alternatives to the native Netflix EurekaClient
You don't have to use the raw Netflix `EurekaClient` and usually it
@@ -340,7 +368,7 @@ eureka.client.preferSameZoneEureka = true
=== How to Include Eureka Server
To include Eureka Server in your project use the starter with group `org.springframework.cloud`
-and artifact id `spring-cloud-starter-eureka-server`. See the http://projects.spring.io/spring-cloud/[Spring Cloud Project page]
+and artifact id `spring-cloud-starter-netflix-eureka-server`. See the http://projects.spring.io/spring-cloud/[Spring Cloud Project page]
for details on setting up your build system with the current Spring Cloud Release Train.
[[spring-cloud-running-eureka-server]]
@@ -369,7 +397,7 @@ Eureka background reading: see https://github.com/cfregly/fluxcapacitor/wiki/Net
[TIP]
====
-Due to Gradle's dependency resolution rules and the lack of a parent bom feature, simply depending on spring-cloud-starter-eureka-server can cause failures on application startup. To remedy this the Spring Boot Gradle plugin must be added and the Spring cloud starter parent bom must be imported like so:
+Due to Gradle's dependency resolution rules and the lack of a parent bom feature, simply depending on spring-cloud-starter-netflix-eureka-server can cause failures on application startup. To remedy this the Spring Boot Gradle plugin must be added and the Spring cloud starter parent bom must be imported like so:
.build.gradle
[source,java,indent=0]
@@ -514,7 +542,7 @@ Having an open circuit stops cascading failures and allows overwhelmed or failin
=== How to Include Hystrix
To include Hystrix in your project use the starter with group `org.springframework.cloud`
-and artifact id `spring-cloud-starter-hystrix`. See the http://projects.spring.io/spring-cloud/[Spring Cloud Project page]
+and artifact id `spring-cloud-starter-netflix-hystrix`. See the http://projects.spring.io/spring-cloud/[Spring Cloud Project page]
for details on setting up your build system with the current Spring Cloud Release Train.
Example boot app:
@@ -626,14 +654,14 @@ be slightly more than three seconds.
=== How to Include Hystrix Dashboard
To include the Hystrix Dashboard in your project use the starter with group `org.springframework.cloud`
-and artifact id `spring-cloud-starter-hystrix-dashboard`. See the http://projects.spring.io/spring-cloud/[Spring Cloud Project page]
+and artifact id `spring-cloud-starter-hystrix-netflix-dashboard`. See the http://projects.spring.io/spring-cloud/[Spring Cloud Project page]
for details on setting up your build system with the current Spring Cloud Release Train.
To run the Hystrix Dashboard annotate your Spring Boot main class with `@EnableHystrixDashboard`. You then visit `/hystrix` and point the dashboard to an individual instances `/hystrix.stream` endpoint in a Hystrix client application.
=== Turbine
-Looking at an individual instances Hystrix data is not very useful in terms of the overall health of the system. https://github.com/Netflix/Turbine[Turbine] is an application that aggregates all of the relevant `/hystrix.stream` endpoints into a combined `/turbine.stream` for use in the Hystrix Dashboard. Individual instances are located via Eureka. Running Turbine is as simple as annotating your main class with the `@EnableTurbine` annotation (e.g. using spring-cloud-starter-turbine to set up the classpath). All of the documented configuration properties from https://github.com/Netflix/Turbine/wiki/Configuration-(1.x)[the Turbine 1 wiki] apply. The only difference is that the `turbine.instanceUrlSuffix` does not need the port prepended as this is handled automatically unless `turbine.instanceInsertPort=false`.
+Looking at an individual instances Hystrix data is not very useful in terms of the overall health of the system. https://github.com/Netflix/Turbine[Turbine] is an application that aggregates all of the relevant `/hystrix.stream` endpoints into a combined `/turbine.stream` for use in the Hystrix Dashboard. Individual instances are located via Eureka. Running Turbine is as simple as annotating your main class with the `@EnableTurbine` annotation (e.g. using spring-cloud-starter-netflix-turbine to set up the classpath). All of the documented configuration properties from https://github.com/Netflix/Turbine/wiki/Configuration-(1.x)[the Turbine 1 wiki] apply. The only difference is that the `turbine.instanceUrlSuffix` does not need the port prepended as this is handled automatically unless `turbine.instanceInsertPort=false`.
NOTE: By default, Turbine looks for the `/hystrix.stream` endpoint on a registered instance by looking up its `homePageUrl` entry in Eureka, then appending `/hystrix.stream` to it. This means that if `spring-boot-actuator` is running on its own port (which is the default), the call to `/hystrix.stream` will fail.
To make turbine find the Hystrix stream at the correct port, you need to add `management.port` to the instances' metadata:
@@ -674,7 +702,7 @@ turbine:
clusterNameExpression: "'default'"
----
-Spring Cloud provides a `spring-cloud-starter-turbine` that has all the dependencies you need to get a Turbine server running. Just create a Spring Boot application and annotate it with `@EnableTurbine`.
+Spring Cloud provides a `spring-cloud-starter-netflix-turbine` that has all the dependencies you need to get a Turbine server running. Just create a Spring Boot application and annotate it with `@EnableTurbine`.
NOTE: by default Spring Cloud allows Turbine to use the host and port to allow multiple processes per host, per cluster. If you want the native Netflix behaviour built into Turbine that does _not_ allow multiple processes per host, per cluster (the key to the instance id is the hostname), then set the property `turbine.combineHostPort=false`.
@@ -686,7 +714,7 @@ On the server side Just create a Spring Boot application and annotate it with `@
You can then point the Hystrix Dashboard to the Turbine Stream Server instead of individual Hystrix streams. If Turbine Stream is running on port 8989 on myhost, then put `http://myhost:8989` in the stream input field in the Hystrix Dashboard. Circuits will be prefixed by their respective serviceId, followed by a dot, then the circuit name.
-Spring Cloud provides a `spring-cloud-starter-turbine-stream` that has all the dependencies you need to get a Turbine Stream server running - just add the Stream binder of your choice, e.g. `spring-cloud-starter-stream-rabbit`. You need Java 8 to run the app because it is Netty-based.
+Spring Cloud provides a `spring-cloud-starter-netflix-turbine-stream` that has all the dependencies you need to get a Turbine Stream server running - just add the Stream binder of your choice, e.g. `spring-cloud-starter-stream-rabbit`. You need Java 8 to run the app because it is Netty-based.
[[spring-cloud-ribbon]]
== Client Side Load Balancer: Ribbon
@@ -708,7 +736,7 @@ annotation). Spring Cloud creates a new ensemble as an
=== How to Include Ribbon
To include Ribbon in your project use the starter with group `org.springframework.cloud`
-and artifact id `spring-cloud-starter-ribbon`. See the http://projects.spring.io/spring-cloud/[Spring Cloud Project page]
+and artifact id `spring-cloud-starter-netflix-ribbon`. See the http://projects.spring.io/spring-cloud/[Spring Cloud Project page]
for details on setting up your build system with the current Spring Cloud Release Train.
=== Customizing the Ribbon Client
@@ -717,7 +745,7 @@ You can configure some bits of a Ribbon client using external
properties in `.ribbon.*`, which is no different than using
the Netflix APIs natively, except that you can use Spring Boot
configuration files. The native options can
-be inspected as static fields in `CommonClientConfigKey` (part of
+be inspected as static fields in https://github.com/Netflix/ribbon/blob/master/ribbon-core/src/main/java/com/netflix/client/config/CommonClientConfigKey.java[`CommonClientConfigKey`] (part of
ribbon-core).
Spring Cloud also lets you take full control of the client by
@@ -749,7 +777,7 @@ Spring Cloud Netflix provides the following beans by default for ribbon
* `IClientConfig` ribbonClientConfig: `DefaultClientConfigImpl`
* `IRule` ribbonRule: `ZoneAvoidanceRule`
-* `IPing` ribbonPing: `NoOpPing`
+* `IPing` ribbonPing: `DummyPing`
* `ServerList` ribbonServerList: `ConfigurationBasedServerList`
* `ServerListFilter` ribbonServerListFilter: `ZonePreferenceServerListFilter`
* `ILoadBalancer` ribbonLoadBalancer: `ZoneAwareLoadBalancer`
@@ -761,16 +789,18 @@ one of the beans described. Example:
[source,java,indent=0]
----
-@Configuration
-public class FooConfiguration {
- @Bean
- public IPing ribbonPing(IClientConfig config) {
- return new PingUrl();
- }
-}
+include::../../../../spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonClientsPreprocessorIntegrationTests.java[tags=sample_override_ribbon_config,indent=0]
----
-This replaces the `NoOpPing` with `PingUrl`.
+This replaces the `NoOpPing` with `PingUrl` and provides a custom `serverListFilter`
+
+=== Customizing default for all Ribbon Clients
+A default configuration can be provided for all Ribbon Clients using the `@RibbonClients` annotation and registering a default configuration as shown in the following example:
+[source,java,indent=0]
+----
+include::../../../../spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/test/RibbonClientDefaultConfigurationTestsConfig.java[tags=sample_default_ribbon_config,indent=0]
+
+----
=== Customizing the Ribbon Client using properties
@@ -926,7 +956,7 @@ https://github.com/Netflix/feign[Feign] is a declarative web service client. It
=== How to Include Feign
To include Feign in your project use the starter with group `org.springframework.cloud`
-and artifact id `spring-cloud-starter-feign`. See the http://projects.spring.io/spring-cloud/[Spring Cloud Project page]
+and artifact id `spring-cloud-starter-openfeign`. See the http://projects.spring.io/spring-cloud/[Spring Cloud Project page]
for details on setting up your build system with the current Spring Cloud Release Train.
Example spring boot app
@@ -1372,7 +1402,7 @@ NOTE: Default Hystrix isolation pattern (ExecutionIsolationStrategy) for all rou
=== How to Include Zuul
To include Zuul in your project use the starter with group `org.springframework.cloud`
-and artifact id `spring-cloud-starter-zuul`. See the http://projects.spring.io/spring-cloud/[Spring Cloud Project page]
+and artifact id `spring-cloud-starter-netflix-zuul`. See the http://projects.spring.io/spring-cloud/[Spring Cloud Project page]
for details on setting up your build system with the current Spring Cloud Release Train.
[[netflix-zuul-reverse-proxy]]
@@ -2391,7 +2421,7 @@ To enable Spectator metrics, include a dependency on `spring-boot-starter-specta
----
org.springframework.cloud
- spring-cloud-starter-spectator
+ spring-cloud-starter-netflix-spectator
----
@@ -2495,7 +2525,7 @@ Atlas was developed by Netflix to manage dimensional time series data for near r
Atlas captures operational intelligence. Whereas business intelligence is data gathered for analyzing trends over time, operational intelligence provides a picture of what is currently happening within a system.
-Spring Cloud provides a `spring-cloud-starter-atlas` that has all the dependencies you need. Then just annotate your Spring Boot application with `@EnableAtlas` and provide a location for your running Atlas server with the `netflix.atlas.uri` property.
+Spring Cloud provides a `spring-cloud-starter-netflix-atlas` that has all the dependencies you need. Then just annotate your Spring Boot application with `@EnableAtlas` and provide a location for your running Atlas server with the `netflix.atlas.uri` property.
==== Global tags
diff --git a/pom.xml b/pom.xml
index 634a2daa..2c570317 100644
--- a/pom.xml
+++ b/pom.xml
@@ -133,6 +133,7 @@
spring-cloud-netflix-turbine
spring-cloud-netflix-turbine-stream
spring-cloud-netflix-sidecar
+ spring-cloud-starter-netflix
spring-cloud-starter-archaius
spring-cloud-starter-atlas
spring-cloud-starter-eureka
diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientFactoryBean.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientFactoryBean.java
index 2c61e8dd..774483af 100644
--- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientFactoryBean.java
+++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientFactoryBean.java
@@ -214,7 +214,7 @@ class FeignClientFactoryBean implements FactoryBean, InitializingBean,
}
throw new IllegalStateException(
- "No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-ribbon?");
+ "No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-netflix-ribbon?");
}
@Override
diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonClientsPreprocessorIntegrationTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonClientsPreprocessorIntegrationTests.java
index 10059092..b298fce9 100644
--- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonClientsPreprocessorIntegrationTests.java
+++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonClientsPreprocessorIntegrationTests.java
@@ -17,6 +17,11 @@
package org.springframework.cloud.netflix.ribbon;
+import com.netflix.loadbalancer.IPing;
+import com.netflix.loadbalancer.PingUrl;
+import com.netflix.loadbalancer.Server;
+import com.netflix.loadbalancer.ZoneAvoidanceRule;
+import com.netflix.loadbalancer.ZoneAwareLoadBalancer;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
@@ -31,9 +36,7 @@ import org.springframework.context.annotation.Import;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import com.netflix.loadbalancer.Server;
-import com.netflix.loadbalancer.ZoneAvoidanceRule;
-import com.netflix.loadbalancer.ZoneAwareLoadBalancer;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals;
@@ -60,8 +63,13 @@ public class RibbonClientsPreprocessorIntegrationTests {
@Test
public void serverListFilterOverride() throws Exception {
- assertEquals("myTestZone", ZonePreferenceServerListFilter.class
- .cast(getLoadBalancer().getFilter()).getZone());
+ assertThat(ZonePreferenceServerListFilter.class
+ .cast(getLoadBalancer().getFilter()).getZone()).isEqualTo("myTestZone");
+ }
+
+ @Test
+ public void pingOverride() throws Exception {
+ assertThat(getLoadBalancer().getPing()).isInstanceOf(PingUrl.class);
}
@Configuration
@@ -71,6 +79,7 @@ public class RibbonClientsPreprocessorIntegrationTests {
protected static class TestConfiguration {
}
+ // tag::sample_override_ribbon_config[]
@Configuration
protected static class FooConfiguration {
@Bean
@@ -79,6 +88,12 @@ public class RibbonClientsPreprocessorIntegrationTests {
filter.setZone("myTestZone");
return filter;
}
+
+ @Bean
+ public IPing ribbonPing() {
+ return new PingUrl();
+ }
}
+ // end::sample_override_ribbon_config[]
}
diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/test/RibbonClientDefaultConfigurationTestsConfig.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/test/RibbonClientDefaultConfigurationTestsConfig.java
index c4c246f8..99a0dda0 100644
--- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/test/RibbonClientDefaultConfigurationTestsConfig.java
+++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/test/RibbonClientDefaultConfigurationTestsConfig.java
@@ -42,6 +42,7 @@ import com.netflix.loadbalancer.ServerListSubsetFilter;
@Configuration
@Import({ PropertyPlaceholderAutoConfiguration.class, ArchaiusAutoConfiguration.class,
UtilAutoConfiguration.class, RibbonAutoConfiguration.class })
+// tag::sample_default_ribbon_config[]
@RibbonClients(defaultConfiguration = DefaultRibbonConfig.class)
public class RibbonClientDefaultConfigurationTestsConfig {
@@ -76,4 +77,5 @@ class DefaultRibbonConfig {
return filter;
}
-}
\ No newline at end of file
+}
+// end::sample_default_ribbon_config[]
\ No newline at end of file
diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/SimpleZuulProxyApplicationTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/SimpleZuulProxyApplicationTests.java
index 6566714b..59db3b79 100644
--- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/SimpleZuulProxyApplicationTests.java
+++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/SimpleZuulProxyApplicationTests.java
@@ -121,7 +121,6 @@ public class SimpleZuulProxyApplicationTests {
}
@Test
- @Ignore
public void getOnSelfWithComplexQueryParam() throws URISyntaxException {
String encodedQueryString = "foo=%7B%22project%22%3A%22stream%22%2C%22logger%22%3A%22javascript%22%2C%22platform%22%3A%22javascript%22%2C%22request%22%3A%7B%22url%22%3A%22https%3A%2F%2Ffoo%2Fadmin";
ResponseEntity result = testRestTemplate.exchange(
diff --git a/spring-cloud-netflix-dependencies/pom.xml b/spring-cloud-netflix-dependencies/pom.xml
index 2029dad6..42f6d9e9 100644
--- a/spring-cloud-netflix-dependencies/pom.xml
+++ b/spring-cloud-netflix-dependencies/pom.xml
@@ -70,6 +70,71 @@
spring-cloud-starter-hystrix-dashboard
${project.version}
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-archaius
+ ${project.version}
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-atlas
+ ${project.version}
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-eureka-client
+ ${project.version}
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-eureka-server
+ ${project.version}
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+ ${project.version}
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-hystrix
+ ${project.version}
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-hystrix-dashboard
+ ${project.version}
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-ribbon
+ ${project.version}
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-spectator
+ ${project.version}
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-turbine
+ ${project.version}
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-turbine-amqp
+ ${project.version}
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-turbine-stream
+ ${project.version}
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-zuul
+ ${project.version}
+
org.springframework.cloud
spring-cloud-starter-ribbon
diff --git a/spring-cloud-netflix-eureka-client/pom.xml b/spring-cloud-netflix-eureka-client/pom.xml
index 0d1c982e..29ccb10a 100644
--- a/spring-cloud-netflix-eureka-client/pom.xml
+++ b/spring-cloud-netflix-eureka-client/pom.xml
@@ -118,11 +118,22 @@
compile
true
+
+ org.springframework.boot
+ spring-boot-starter-security
+ test
+
org.springframework.boot
spring-boot-starter-test
test
+
+ org.springframework.cloud
+ spring-cloud-commons
+ test-jar
+ test
+
org.springframework.retry
spring-retry
diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/CloudEurekaClient.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/CloudEurekaClient.java
index 79a164f3..74db0b83 100644
--- a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/CloudEurekaClient.java
+++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/CloudEurekaClient.java
@@ -29,6 +29,7 @@ import org.springframework.util.ReflectionUtils;
import com.netflix.appinfo.ApplicationInfoManager;
import com.netflix.appinfo.InstanceInfo;
import com.netflix.appinfo.InstanceInfo.InstanceStatus;
+import com.netflix.discovery.AbstractDiscoveryClientOptionalArgs;
import com.netflix.discovery.DiscoveryClient;
import com.netflix.discovery.EurekaClientConfig;
import com.netflix.discovery.shared.transport.EurekaHttpClient;
@@ -55,7 +56,7 @@ public class CloudEurekaClient extends DiscoveryClient {
public CloudEurekaClient(ApplicationInfoManager applicationInfoManager,
EurekaClientConfig config,
- DiscoveryClientOptionalArgs args,
+ AbstractDiscoveryClientOptionalArgs> args,
ApplicationEventPublisher publisher) {
super(applicationInfoManager, config, args);
this.applicationInfoManager = applicationInfoManager;
diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java
index 70c64d87..d8b4f6c4 100644
--- a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java
+++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java
@@ -17,6 +17,8 @@
package org.springframework.cloud.netflix.eureka;
+import static org.springframework.cloud.commons.util.IdUtils.getDefaultInstanceId;
+
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@@ -48,6 +50,7 @@ import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationP
import org.springframework.cloud.client.serviceregistry.ServiceRegistryAutoConfiguration;
import org.springframework.cloud.commons.util.InetUtils;
import org.springframework.cloud.context.scope.refresh.RefreshScope;
+import org.springframework.cloud.netflix.eureka.config.DiscoveryClientOptionalArgsConfiguration;
import org.springframework.cloud.netflix.eureka.serviceregistry.EurekaAutoServiceRegistration;
import org.springframework.cloud.netflix.eureka.serviceregistry.EurekaRegistration;
import org.springframework.cloud.netflix.eureka.serviceregistry.EurekaServiceRegistry;
@@ -55,6 +58,7 @@ import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.Lazy;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.PropertyResolver;
@@ -64,9 +68,10 @@ import com.netflix.appinfo.ApplicationInfoManager;
import com.netflix.appinfo.EurekaInstanceConfig;
import com.netflix.appinfo.HealthCheckHandler;
import com.netflix.appinfo.InstanceInfo;
-import com.netflix.discovery.DiscoveryClient.DiscoveryClientOptionalArgs;
+import com.netflix.discovery.AbstractDiscoveryClientOptionalArgs;
import com.netflix.discovery.EurekaClient;
import com.netflix.discovery.EurekaClientConfig;
+
import static org.springframework.cloud.commons.util.IdUtils.getDefaultInstanceId;
/**
@@ -75,10 +80,12 @@ import static org.springframework.cloud.commons.util.IdUtils.getDefaultInstanceI
* @author Jon Schneider
* @author Matt Jenkins
* @author Ryan Baxter
+ * @author Daniel Lavoie
*/
@Configuration
@EnableConfigurationProperties
@ConditionalOnClass(EurekaClientConfig.class)
+@Import(DiscoveryClientOptionalArgsConfiguration.class)
@ConditionalOnBean(EurekaDiscoveryClientConfiguration.Marker.class)
@ConditionalOnProperty(value = "eureka.client.enabled", matchIfMissing = true)
@AutoConfigureBefore({ NoopDiscoveryClientAutoConfiguration.class,
@@ -184,12 +191,6 @@ public class EurekaClientAutoConfiguration {
return new EurekaAutoServiceRegistration(context, registry, registration);
}
- @Bean
- @ConditionalOnMissingBean(value = DiscoveryClientOptionalArgs.class, search = SearchStrategy.CURRENT)
- public MutableDiscoveryClientOptionalArgs discoveryClientOptionalArgs() {
- return new MutableDiscoveryClientOptionalArgs();
- }
-
@Configuration
@ConditionalOnMissingRefreshScope
protected static class EurekaClientConfiguration {
@@ -197,8 +198,8 @@ public class EurekaClientAutoConfiguration {
@Autowired
private ApplicationContext context;
- @Autowired(required = false)
- private DiscoveryClientOptionalArgs optionalArgs;
+ @Autowired
+ private AbstractDiscoveryClientOptionalArgs> optionalArgs;
@Bean(destroyMethod = "shutdown")
@ConditionalOnMissingBean(value = EurekaClient.class, search = SearchStrategy.CURRENT)
@@ -223,8 +224,8 @@ public class EurekaClientAutoConfiguration {
@Autowired
private ApplicationContext context;
- @Autowired(required = false)
- private DiscoveryClientOptionalArgs optionalArgs;
+ @Autowired
+ private AbstractDiscoveryClientOptionalArgs> optionalArgs;
@Bean(destroyMethod = "shutdown")
@ConditionalOnMissingBean(value = EurekaClient.class, search = SearchStrategy.CURRENT)
diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/config/DiscoveryClientOptionalArgsConfiguration.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/config/DiscoveryClientOptionalArgsConfiguration.java
new file mode 100644
index 00000000..d0439afb
--- /dev/null
+++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/config/DiscoveryClientOptionalArgsConfiguration.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2017 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.netflix.eureka.config;
+
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
+import org.springframework.boot.autoconfigure.condition.SearchStrategy;
+import org.springframework.cloud.netflix.eureka.MutableDiscoveryClientOptionalArgs;
+import org.springframework.cloud.netflix.eureka.http.RestTemplateDiscoveryClientOptionalArgs;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import com.netflix.discovery.AbstractDiscoveryClientOptionalArgs;
+
+/**
+ * @author Daniel Lavoie
+ */
+@Configuration
+public class DiscoveryClientOptionalArgsConfiguration {
+ @Bean
+ @ConditionalOnMissingClass("com.sun.jersey.api.client.filter.ClientFilter")
+ @ConditionalOnMissingBean(value = AbstractDiscoveryClientOptionalArgs.class, search = SearchStrategy.CURRENT)
+ public RestTemplateDiscoveryClientOptionalArgs restTemplateDiscoveryClientOptionalArgs() {
+ return new RestTemplateDiscoveryClientOptionalArgs();
+ }
+
+ @Bean
+ @ConditionalOnClass(name = "com.sun.jersey.api.client.filter.ClientFilter")
+ @ConditionalOnMissingBean(value = AbstractDiscoveryClientOptionalArgs.class, search = SearchStrategy.CURRENT)
+ public MutableDiscoveryClientOptionalArgs discoveryClientOptionalArgs() {
+ return new MutableDiscoveryClientOptionalArgs();
+ }
+}
diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/http/EurekaApplications.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/http/EurekaApplications.java
new file mode 100644
index 00000000..44906b1b
--- /dev/null
+++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/http/EurekaApplications.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2017 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.netflix.eureka.http;
+
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.netflix.discovery.shared.Application;
+import com.netflix.discovery.shared.Applications;
+
+/**
+ * A simple wrapper class for {@link Applications} that insure proprer Jackson
+ * serialization through the JsonPropert overwrites.
+ *
+ * @author Daniel Lavoie
+ */
+public class EurekaApplications extends com.netflix.discovery.shared.Applications {
+
+ @JsonCreator
+ public EurekaApplications(@JsonProperty("apps__hashcode") String appsHashCode,
+ @JsonProperty("versions__delta") Long versionDelta,
+ @JsonProperty("application") List registeredApplications) {
+ super(appsHashCode, versionDelta, registeredApplications);
+ }
+}
\ No newline at end of file
diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/http/RestTemplateDiscoveryClientOptionalArgs.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/http/RestTemplateDiscoveryClientOptionalArgs.java
new file mode 100644
index 00000000..b0eba96f
--- /dev/null
+++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/http/RestTemplateDiscoveryClientOptionalArgs.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2017 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.netflix.eureka.http;
+
+import com.netflix.discovery.AbstractDiscoveryClientOptionalArgs;
+
+/**
+ * @author Daniel Lavoie
+ */
+public class RestTemplateDiscoveryClientOptionalArgs
+ extends AbstractDiscoveryClientOptionalArgs {
+ public RestTemplateDiscoveryClientOptionalArgs() {
+ setTransportClientFactories(new RestTemplateTransportClientFactories());
+ }
+}
diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/http/RestTemplateEurekaHttpClient.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/http/RestTemplateEurekaHttpClient.java
new file mode 100644
index 00000000..12f205b4
--- /dev/null
+++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/http/RestTemplateEurekaHttpClient.java
@@ -0,0 +1,227 @@
+/*
+ * Copyright 2017 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.netflix.eureka.http;
+
+import static com.netflix.discovery.shared.transport.EurekaHttpResponse.anEurekaHttpResponse;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.client.RestTemplate;
+
+import com.netflix.appinfo.InstanceInfo;
+import com.netflix.appinfo.InstanceInfo.InstanceStatus;
+import com.netflix.discovery.shared.Application;
+import com.netflix.discovery.shared.Applications;
+import com.netflix.discovery.shared.transport.EurekaHttpClient;
+import com.netflix.discovery.shared.transport.EurekaHttpResponse;
+import com.netflix.discovery.shared.transport.EurekaHttpResponse.EurekaHttpResponseBuilder;
+import com.netflix.discovery.util.StringUtil;
+
+/**
+ * @author Daniel Lavoie
+ */
+public class RestTemplateEurekaHttpClient implements EurekaHttpClient {
+
+ protected final Log logger = LogFactory.getLog(getClass());
+
+ private RestTemplate restTemplate;
+ private String serviceUrl;
+
+ public RestTemplateEurekaHttpClient(RestTemplate restTemplate, String serviceUrl) {
+ this.restTemplate = restTemplate;
+ this.serviceUrl = serviceUrl;
+ }
+
+ @Override
+ public EurekaHttpResponse register(InstanceInfo info) {
+ String urlPath = serviceUrl + "apps/" + info.getAppName();
+
+ HttpHeaders headers = new HttpHeaders();
+ headers.add(HttpHeaders.ACCEPT_ENCODING, "gzip");
+ headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
+
+ ResponseEntity response = restTemplate.exchange(urlPath, HttpMethod.POST,
+ new HttpEntity(info, headers), Void.class);
+
+ return anEurekaHttpResponse(response.getStatusCodeValue())
+ .headers(headersOf(response)).build();
+ }
+
+ @Override
+ public EurekaHttpResponse cancel(String appName, String id) {
+ String urlPath = serviceUrl + "apps/" + appName + '/' + id;
+
+ ResponseEntity response = restTemplate.exchange(urlPath, HttpMethod.DELETE,
+ null, Void.class);
+
+ return anEurekaHttpResponse(response.getStatusCodeValue())
+ .headers(headersOf(response)).build();
+ }
+
+ @Override
+ public EurekaHttpResponse sendHeartBeat(String appName, String id,
+ InstanceInfo info, InstanceStatus overriddenStatus) {
+ String urlPath = serviceUrl + "apps/" + appName + '/' + id + "?status="
+ + info.getStatus().toString() + "&lastDirtyTimestamp="
+ + info.getLastDirtyTimestamp().toString() + (overriddenStatus != null
+ ? "&overriddenstatus=" + overriddenStatus.name() : "");
+
+ ResponseEntity response = restTemplate.exchange(urlPath,
+ HttpMethod.PUT, null, InstanceInfo.class);
+
+ EurekaHttpResponseBuilder eurekaResponseBuilder = anEurekaHttpResponse(
+ response.getStatusCodeValue(), InstanceInfo.class)
+ .headers(headersOf(response));
+
+ if (response.hasBody())
+ eurekaResponseBuilder.entity(response.getBody());
+
+ return eurekaResponseBuilder.build();
+ }
+
+ @Override
+ public EurekaHttpResponse statusUpdate(String appName, String id,
+ InstanceStatus newStatus, InstanceInfo info) {
+ String urlPath = serviceUrl + "apps/" + appName + '/' + id + "?status="
+ + newStatus.name() + "&lastDirtyTimestamp="
+ + info.getLastDirtyTimestamp().toString();
+
+ ResponseEntity response = restTemplate.exchange(urlPath, HttpMethod.PUT,
+ null, Void.class);
+
+ return anEurekaHttpResponse(response.getStatusCodeValue())
+ .headers(headersOf(response)).build();
+ }
+
+ @Override
+ public EurekaHttpResponse deleteStatusOverride(String appName, String id,
+ InstanceInfo info) {
+ String urlPath = serviceUrl + "apps/" + appName + '/' + id
+ + "/status?lastDirtyTimestamp=" + info.getLastDirtyTimestamp().toString();
+
+ ResponseEntity response = restTemplate.exchange(urlPath, HttpMethod.DELETE,
+ null, Void.class);
+
+ return anEurekaHttpResponse(response.getStatusCodeValue())
+ .headers(headersOf(response)).build();
+ }
+
+ @Override
+ public EurekaHttpResponse getApplications(String... regions) {
+ return getApplicationsInternal("apps/", regions);
+ }
+
+ private EurekaHttpResponse getApplicationsInternal(String urlPath,
+ String[] regions) {
+ String url = serviceUrl + urlPath;
+
+ if (regions != null && regions.length > 0)
+ urlPath = (urlPath.contains("?") ? "&" : "?") + "regions="
+ + StringUtil.join(regions);
+
+ ResponseEntity response = restTemplate.exchange(url,
+ HttpMethod.GET, null, EurekaApplications.class);
+
+ return anEurekaHttpResponse(response.getStatusCodeValue(),
+ response.getStatusCode().value() == HttpStatus.OK.value()
+ && response.hasBody() ? (Applications) response.getBody() : null)
+ .headers(headersOf(response)).build();
+ }
+
+ @Override
+ public EurekaHttpResponse getDelta(String... regions) {
+ return getApplicationsInternal("apps/delta", regions);
+ }
+
+ @Override
+ public EurekaHttpResponse getVip(String vipAddress, String... regions) {
+ return getApplicationsInternal("vips/" + vipAddress, regions);
+ }
+
+ @Override
+ public EurekaHttpResponse getSecureVip(String secureVipAddress,
+ String... regions) {
+ return getApplicationsInternal("svips/" + secureVipAddress, regions);
+ }
+
+ @Override
+ public EurekaHttpResponse getApplication(String appName) {
+ String urlPath = serviceUrl + "apps/" + appName;
+
+ ResponseEntity response = restTemplate.exchange(urlPath,
+ HttpMethod.GET, null, Application.class);
+
+ Application application = response.getStatusCodeValue() == HttpStatus.OK.value()
+ && response.hasBody() ? response.getBody() : null;
+
+ return anEurekaHttpResponse(response.getStatusCodeValue(), application)
+ .headers(headersOf(response)).build();
+ }
+
+ @Override
+ public EurekaHttpResponse getInstance(String appName, String id) {
+ return getInstanceInternal("apps/" + appName + '/' + id);
+ }
+
+ @Override
+ public EurekaHttpResponse getInstance(String id) {
+ return getInstanceInternal("instances/" + id);
+ }
+
+ private EurekaHttpResponse getInstanceInternal(String urlPath) {
+ urlPath = serviceUrl + urlPath;
+
+ ResponseEntity response = restTemplate.exchange(urlPath,
+ HttpMethod.GET, null, InstanceInfo.class);
+
+ return anEurekaHttpResponse(response.getStatusCodeValue(),
+ response.getStatusCodeValue() == HttpStatus.OK.value()
+ && response.hasBody() ? response.getBody() : null)
+ .headers(headersOf(response)).build();
+ }
+
+ @Override
+ public void shutdown() {
+ // Nothing to do
+ }
+
+ private static Map headersOf(ResponseEntity> response) {
+ HttpHeaders httpHeaders = response.getHeaders();
+ if (httpHeaders == null || httpHeaders.isEmpty()) {
+ return Collections.emptyMap();
+ }
+ Map headers = new HashMap<>();
+ for (Entry> entry : httpHeaders.entrySet()) {
+ if (!entry.getValue().isEmpty()) {
+ headers.put(entry.getKey(), entry.getValue().get(0));
+ }
+ }
+ return headers;
+ }
+}
diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/http/RestTemplateTransportClientFactories.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/http/RestTemplateTransportClientFactories.java
new file mode 100644
index 00000000..f2877be7
--- /dev/null
+++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/http/RestTemplateTransportClientFactories.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2017 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.netflix.eureka.http;
+
+import java.util.Collection;
+
+import com.netflix.appinfo.InstanceInfo;
+import com.netflix.discovery.EurekaClientConfig;
+import com.netflix.discovery.shared.transport.TransportClientFactory;
+import com.netflix.discovery.shared.transport.jersey.EurekaJerseyClient;
+import com.netflix.discovery.shared.transport.jersey.TransportClientFactories;
+
+/**
+ * @author Daniel Lavoie
+ */
+public class RestTemplateTransportClientFactories
+ implements TransportClientFactories {
+
+ @Override
+ public TransportClientFactory newTransportClientFactory(
+ Collection additionalFilters, EurekaJerseyClient providedJerseyClient) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public TransportClientFactory newTransportClientFactory(
+ EurekaClientConfig clientConfig, Collection additionalFilters,
+ InstanceInfo myInstanceInfo) {
+ return new RestTemplateTransportClientFactory();
+ }
+
+}
diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/http/RestTemplateTransportClientFactory.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/http/RestTemplateTransportClientFactory.java
new file mode 100644
index 00000000..00c8f9d3
--- /dev/null
+++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/http/RestTemplateTransportClientFactory.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2017 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.netflix.eureka.http;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import org.springframework.http.client.support.BasicAuthorizationInterceptor;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
+import org.springframework.web.client.RestTemplate;
+
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.PropertyNamingStrategy;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.netflix.discovery.shared.resolver.EurekaEndpoint;
+import com.netflix.discovery.shared.transport.EurekaHttpClient;
+import com.netflix.discovery.shared.transport.TransportClientFactory;
+
+/**
+ * Provides the custom {@link RestTemplate} required by the
+ * {@link RestTemplateEurekaHttpClient}. Relies on Jackson for serialization and
+ * deserialization.
+ *
+ * @author Daniel Lavoie
+ */
+public class RestTemplateTransportClientFactory implements TransportClientFactory {
+
+ @Override
+ public EurekaHttpClient newClient(EurekaEndpoint serviceUrl) {
+ return new RestTemplateEurekaHttpClient(restTemplate(serviceUrl.getServiceUrl()),
+ serviceUrl.getServiceUrl());
+ }
+
+ private RestTemplate restTemplate(String serviceUrl) {
+ RestTemplate restTemplate = new RestTemplate();
+ try {
+ URI serviceURI = new URI(serviceUrl);
+ if (serviceURI.getUserInfo() != null) {
+ String[] credentials = serviceURI.getUserInfo().split(":");
+ if (credentials.length == 2) {
+ restTemplate.getInterceptors().add(new BasicAuthorizationInterceptor(
+ credentials[0], credentials[1]));
+ }
+ }
+ }
+ catch (URISyntaxException ignore) {
+
+ }
+
+ restTemplate.getMessageConverters().add(0, mappingJacksonHttpMessageConverter());
+
+ return restTemplate;
+ }
+
+ /**
+ * Provides the serialization configurations required by the Eureka Server. JSON
+ * content exchanged with eureka requires a root node matching the entity being
+ * serialized or deserialized. Achived with
+ * {@link SerializationFeature.WRAP_ROOT_VALUE} and
+ * {@link DeserializationFeature.UNWRAP_ROOT_VALUE}.
+ * {@link PropertyNamingStrategy.SnakeCaseStrategy} is applied to the underlying
+ * {@link ObjectMapper}.
+ *
+ *
+ * @return
+ */
+ public MappingJackson2HttpMessageConverter mappingJacksonHttpMessageConverter() {
+ MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
+ converter.setObjectMapper(new ObjectMapper()
+ .setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE));
+
+ converter.getObjectMapper().configure(SerializationFeature.WRAP_ROOT_VALUE, true);
+ converter.getObjectMapper().configure(DeserializationFeature.UNWRAP_ROOT_VALUE,
+ true);
+
+ return converter;
+ }
+
+ @Override
+ public void shutdown() {
+ }
+
+}
diff --git a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/config/JerseyOptionalArgsConfigurationTest.java b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/config/JerseyOptionalArgsConfigurationTest.java
new file mode 100644
index 00000000..ed2930a1
--- /dev/null
+++ b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/config/JerseyOptionalArgsConfigurationTest.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2017 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.netflix.eureka.config;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
+import org.springframework.cloud.netflix.eureka.sample.EurekaSampleApplication;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import com.netflix.discovery.DiscoveryClient.DiscoveryClientOptionalArgs;
+
+/**
+ * @author Daniel Lavoie
+ */
+@DirtiesContext
+@RunWith(SpringJUnit4ClassRunner.class)
+@SpringBootTest(classes = EurekaSampleApplication.class, webEnvironment = WebEnvironment.RANDOM_PORT)
+public class JerseyOptionalArgsConfigurationTest {
+ @Autowired
+ private DiscoveryClientOptionalArgs optionalArgs;
+
+ @Test
+ public void contextLoads() {
+ Assert.assertNotNull(optionalArgs);
+ }
+}
diff --git a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/config/RestTemplateOptionalArgsConfigurationTest.java b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/config/RestTemplateOptionalArgsConfigurationTest.java
new file mode 100644
index 00000000..f993dbce
--- /dev/null
+++ b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/config/RestTemplateOptionalArgsConfigurationTest.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2017 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.netflix.eureka.config;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
+import org.springframework.cloud.ClassPathExclusions;
+import org.springframework.cloud.FilteredClassPathRunner;
+import org.springframework.cloud.netflix.eureka.http.RestTemplateDiscoveryClientOptionalArgs;
+import org.springframework.cloud.netflix.eureka.sample.EurekaSampleApplication;
+import org.springframework.context.ConfigurableApplicationContext;
+
+/**
+ * @author Daniel Lavoie
+ */
+@RunWith(FilteredClassPathRunner.class)
+@ClassPathExclusions({ "jersey-client-*", "jersey-core-*", "jersey-apache-client4-*" })
+@SpringBootTest(classes = EurekaSampleApplication.class, webEnvironment = WebEnvironment.RANDOM_PORT)
+public class RestTemplateOptionalArgsConfigurationTest {
+ @Test
+ public void contextLoads() {
+ try (ConfigurableApplicationContext context = new SpringApplicationBuilder()
+ .web(false).sources(EurekaSampleApplication.class).run()) {
+ Assert.assertNotNull(
+ context.getBean(RestTemplateDiscoveryClientOptionalArgs.class));
+ }
+ }
+}
diff --git a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/http/EurekaServerMockApplication.java b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/http/EurekaServerMockApplication.java
new file mode 100644
index 00000000..50ee6263
--- /dev/null
+++ b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/http/EurekaServerMockApplication.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2017 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.netflix.eureka.http;
+
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.netflix.appinfo.InstanceInfo;
+import com.netflix.discovery.shared.Application;
+import com.netflix.discovery.shared.Applications;
+
+/**
+ * Mocked Eureka Server
+ *
+ * @author Daniel Lavoie
+ */
+@Configuration
+@RestController
+@SpringBootApplication
+public class EurekaServerMockApplication {
+ private static final InstanceInfo INFO = new InstanceInfo(null, null, null, null,
+ null, null, null, null, null, null, null, null, null, 0, null, null, null,
+ null, null, null, null, 0l, 0l, null, null);
+
+ /**
+ * Simulates Eureka Server own's serialization.
+ * @return
+ */
+ @Bean
+ public MappingJackson2HttpMessageConverter mappingJacksonHttpMessageConverter() {
+ return new RestTemplateTransportClientFactory()
+ .mappingJacksonHttpMessageConverter();
+ }
+
+ @ResponseStatus(HttpStatus.OK)
+ @PostMapping("/apps/{appName}")
+ public void register(@PathVariable String appName,
+ @RequestBody InstanceInfo instanceInfo) {
+ // Nothing to do
+ }
+
+ @ResponseStatus(HttpStatus.OK)
+ @DeleteMapping("/apps/{appName}/{id}")
+ public void cancel(@PathVariable String appName, @PathVariable String id) {
+
+ }
+
+ @ResponseStatus(HttpStatus.OK)
+ @PutMapping(value = "/apps/{appName}/{id}", params = { "status",
+ "lastDirtyTimestamp" })
+ public InstanceInfo sendHeartBeat(@PathVariable String appName,
+ @PathVariable String id, @RequestParam String status,
+ @RequestParam String lastDirtyTimestamp,
+ @RequestParam(required = false) String overriddenstatus) {
+ return new InstanceInfo(null, null, null, null, null, null, null, null, null,
+ null, null, null, null, 0, null, null, null, null, null, null, null, 0l,
+ 0l, null, null);
+ }
+
+ @ResponseStatus(HttpStatus.OK)
+ @PutMapping(value = "/apps/{appName}/{id}/status", params = { "value",
+ "lastDirtyTimestamp" })
+ public void statusUpdate(@PathVariable String appName, @PathVariable String id,
+ @RequestParam String value, @RequestParam String lastDirtyTimestamp) {
+
+ }
+
+ @ResponseStatus(HttpStatus.OK)
+ @DeleteMapping(value = "/apps/{appName}/{id}/status", params = "lastDirtyTimestamp")
+ public void deleteStatusOverride(@PathVariable String appName,
+ @PathVariable String id, @RequestParam String lastDirtyTimestamp) {
+
+ }
+
+ @GetMapping(value = { "/apps", "/apps/delta", "/vips/{address}", "/svips/{address}" })
+ public Applications getApplications(@PathVariable(required = false) String address,
+ @RequestParam(required = false) String regions) {
+ return new Applications();
+ }
+
+ @GetMapping(value = "/apps/{appName}")
+ public Application getApplication(@PathVariable String appName) {
+ return new Application();
+ }
+
+ @GetMapping(value = { "/apps/{appName}/{id}", "/instances/{id}" })
+ public InstanceInfo getInstance(@PathVariable(required = false) String appName,
+ @PathVariable String id) {
+ return INFO;
+ }
+}
diff --git a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/http/RestTemplateEurekaHttpClientTest.java b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/http/RestTemplateEurekaHttpClientTest.java
new file mode 100644
index 00000000..e02f50f3
--- /dev/null
+++ b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/http/RestTemplateEurekaHttpClientTest.java
@@ -0,0 +1,139 @@
+/*
+ * Copyright 2017 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.netflix.eureka.http;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
+import org.springframework.cloud.commons.util.InetUtils;
+import org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean;
+import org.springframework.http.HttpStatus;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import com.netflix.appinfo.InstanceInfo;
+import com.netflix.appinfo.InstanceInfo.InstanceStatus;
+import com.netflix.appinfo.providers.EurekaConfigBasedInstanceInfoProvider;
+import com.netflix.discovery.shared.resolver.DefaultEndpoint;
+import com.netflix.discovery.shared.transport.EurekaHttpClient;
+
+/**
+ * @author Daniel Lavoie
+ */
+@RunWith(SpringJUnit4ClassRunner.class)
+@SpringBootTest(classes = EurekaServerMockApplication.class, properties = { "debug=true",
+ "security.basic.enabled=true" }, webEnvironment = WebEnvironment.RANDOM_PORT)
+@DirtiesContext
+public class RestTemplateEurekaHttpClientTest {
+ @Autowired
+ private InetUtils inetUtils;
+
+ @Value("http://${security.user.name}:${security.user.password}@localhost:${local.server.port}")
+ private String serviceUrl;
+
+ private EurekaHttpClient eurekaHttpClient;
+ private InstanceInfo info;
+
+ @Before
+ public void setup() {
+ eurekaHttpClient = new RestTemplateTransportClientFactory()
+ .newClient(new DefaultEndpoint(serviceUrl));
+
+ EurekaInstanceConfigBean config = new EurekaInstanceConfigBean(inetUtils);
+
+ String appname = "customapp";
+ config.setIpAddress("127.0.0.1");
+ config.setHostname("localhost");
+ config.setAppname(appname);
+ config.setVirtualHostName(appname);
+ config.setSecureVirtualHostName(appname);
+ config.setNonSecurePort(4444);
+ config.setInstanceId("127.0.0.1:customapp:4444");
+
+ info = new EurekaConfigBasedInstanceInfoProvider(config).get();
+ }
+
+ @Test
+ public void testRegister() {
+ Assert.assertEquals(HttpStatus.OK.value(),
+ eurekaHttpClient.register(info).getStatusCode());
+ }
+
+ @Test
+ public void testCancel() {
+ Assert.assertEquals(HttpStatus.OK.value(),
+ eurekaHttpClient.cancel("test", "test").getStatusCode());
+ }
+
+ @Test
+ public void testSendHeartBeat() {
+ Assert.assertEquals(HttpStatus.OK.value(), eurekaHttpClient
+ .sendHeartBeat("test", "test", info, null).getStatusCode());
+ }
+
+ @Test
+ public void testStatusUpdate() {
+ Assert.assertEquals(HttpStatus.OK.value(), eurekaHttpClient
+ .statusUpdate("test", "test", InstanceStatus.UP, info).getStatusCode());
+ }
+
+ @Test
+ public void testDeleteStatusOverride() {
+ Assert.assertEquals(HttpStatus.OK.value(), eurekaHttpClient
+ .deleteStatusOverride("test", "test", info).getStatusCode());
+ }
+
+ @Test
+ public void testGetApplications() {
+ Assert.assertNotNull(eurekaHttpClient.getApplications().getEntity());
+ Assert.assertNotNull(eurekaHttpClient.getApplications("us", "eu").getEntity());
+ }
+
+ @Test
+ public void testGetDelta() {
+ eurekaHttpClient.getDelta().getEntity();
+ eurekaHttpClient.getDelta("us", "eu").getEntity();
+ }
+
+ @Test
+ public void testGetVips() {
+ eurekaHttpClient.getVip("test");
+ eurekaHttpClient.getVip("test", "us", "eu");
+ }
+
+ @Test
+ public void testGetSecureVip() {
+ eurekaHttpClient.getSecureVip("test");
+ eurekaHttpClient.getSecureVip("test", "us", "eu");
+ }
+
+ @Test
+ public void testGetApplication() {
+ eurekaHttpClient.getApplication("test");
+ }
+
+ @Test
+ public void testGetInstance() {
+ eurekaHttpClient.getInstance("test");
+ eurekaHttpClient.getInstance("test", "test");
+ }
+}
diff --git a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/http/RestTemplateTransportClientFactoriesTest.java b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/http/RestTemplateTransportClientFactoriesTest.java
new file mode 100644
index 00000000..88d02636
--- /dev/null
+++ b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/http/RestTemplateTransportClientFactoriesTest.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2017 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.netflix.eureka.http;
+
+import org.junit.Test;
+
+/**
+ * @author Daniel Lavoie
+ */
+public class RestTemplateTransportClientFactoriesTest {
+ @Test(expected = UnsupportedOperationException.class)
+ public void testJerseyIsUnsuported() {
+ new RestTemplateTransportClientFactories().newTransportClientFactory(null, null);
+ }
+}
diff --git a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/http/RestTemplateTransportClientFactoryTest.java b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/http/RestTemplateTransportClientFactoryTest.java
new file mode 100644
index 00000000..50de78ae
--- /dev/null
+++ b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/http/RestTemplateTransportClientFactoryTest.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2017 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.netflix.eureka.http;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.netflix.discovery.shared.resolver.DefaultEndpoint;
+
+/**
+ * @author Daniel Lavoie
+ */
+public class RestTemplateTransportClientFactoryTest {
+ private RestTemplateTransportClientFactory transportClientFatory;
+
+ @Before
+ public void setup() {
+ transportClientFatory = new RestTemplateTransportClientFactory();
+ }
+
+ @Test
+ public void testWithoutUserInfo() {
+ transportClientFatory.newClient(new DefaultEndpoint("http://localhost:8761"));
+ }
+
+ @Test
+ public void testInvalidUserInfo() {
+ transportClientFatory
+ .newClient(new DefaultEndpoint("http://test@localhost:8761"));
+ }
+
+ @Test
+ public void testUserInfo() {
+ transportClientFatory
+ .newClient(new DefaultEndpoint("http://test:test@localhost:8761"));
+ }
+
+ @After
+ public void shutdown() {
+ transportClientFatory.shutdown();
+ }
+}
diff --git a/spring-cloud-netflix-eureka-client/src/test/resources/application.yml b/spring-cloud-netflix-eureka-client/src/test/resources/application.yml
index 7423d1f9..3e83e31a 100644
--- a/spring-cloud-netflix-eureka-client/src/test/resources/application.yml
+++ b/spring-cloud-netflix-eureka-client/src/test/resources/application.yml
@@ -2,4 +2,11 @@
foo3:
ribbon:
NFLoadBalancerPingClassName: com.netflix.loadbalancer.DummyPing
- NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList
\ No newline at end of file
+ NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList
+
+security:
+ basic:
+ enabled: false
+ user:
+ name: test
+ password: test
\ No newline at end of file
diff --git a/spring-cloud-starter-archaius/pom.xml b/spring-cloud-starter-archaius/pom.xml
index 7bcef00f..cea5ed42 100644
--- a/spring-cloud-starter-archaius/pom.xml
+++ b/spring-cloud-starter-archaius/pom.xml
@@ -9,8 +9,9 @@
..
spring-cloud-starter-archaius
+ pom
spring-cloud-starter-archaius
- Spring Cloud Starter
+ Spring Cloud Starter Archaius (deprecated, please use spring-cloud-starter-netflix-archaius)
https://projects.spring.io/spring-cloud
Pivotal Software, Inc.
@@ -22,37 +23,7 @@
org.springframework.cloud
- spring-cloud-starter
+ spring-cloud-starter-netflix-archaius
-
- org.springframework.cloud
- spring-cloud-netflix-core
-
-
- com.netflix.archaius
- archaius-core
-
-
-
- commons-configuration
- commons-configuration
-
-
- com.fasterxml.jackson.core
- jackson-annotations
-
-
- com.fasterxml.jackson.core
- jackson-core
-
-
- com.fasterxml.jackson.core
- jackson-databind
-
-
- com.google.guava
- guava
-
-
diff --git a/spring-cloud-starter-atlas/pom.xml b/spring-cloud-starter-atlas/pom.xml
index 9a51e304..429da5ef 100644
--- a/spring-cloud-starter-atlas/pom.xml
+++ b/spring-cloud-starter-atlas/pom.xml
@@ -9,8 +9,9 @@
..
spring-cloud-starter-atlas
+ pom
spring-cloud-starter-atlas
- Spring Cloud Starter Atlas
+ Spring Cloud Starter Atlas (deprecated, please use spring-cloud-starter-netflix-atlas
https://projects.spring.io/spring-cloud
Pivotal Software, Inc.
@@ -22,19 +23,7 @@
org.springframework.cloud
- spring-cloud-starter
-
-
- org.springframework.cloud
- spring-cloud-netflix-core
-
-
- com.netflix.servo
- servo-core
-
-
- com.fasterxml.jackson.dataformat
- jackson-dataformat-smile
+ spring-cloud-starter-netflix-atlas
diff --git a/spring-cloud-starter-eureka-server/pom.xml b/spring-cloud-starter-eureka-server/pom.xml
index 2e6c5186..74595e36 100644
--- a/spring-cloud-starter-eureka-server/pom.xml
+++ b/spring-cloud-starter-eureka-server/pom.xml
@@ -9,8 +9,9 @@
..
spring-cloud-starter-eureka-server
+ pom
spring-cloud-starter-eureka-server
- Spring Cloud Starter
+ Spring Cloud Starter Eureka Server (deprecated, please use spring-cloud-starter-netflix-eureka-server)
https://projects.spring.io/spring-cloud
Pivotal Software, Inc.
@@ -22,23 +23,7 @@
org.springframework.cloud
- spring-cloud-starter
-
-
- org.springframework.cloud
- spring-cloud-netflix-eureka-server
-
-
- org.springframework.cloud
- spring-cloud-starter-archaius
-
-
- org.springframework.cloud
- spring-cloud-starter-ribbon
-
-
- com.netflix.ribbon
- ribbon-eureka
+ spring-cloud-starter-netflix-eureka-server
diff --git a/spring-cloud-starter-eureka/pom.xml b/spring-cloud-starter-eureka/pom.xml
index 6b3e458b..0d201022 100644
--- a/spring-cloud-starter-eureka/pom.xml
+++ b/spring-cloud-starter-eureka/pom.xml
@@ -9,8 +9,9 @@
..
spring-cloud-starter-eureka
+ pom
spring-cloud-starter-eureka
- Spring Cloud Starter
+ Spring Cloud Starter Eureka (deprecated, please use spring-cloud-starter-netflix-eureka-client
https://projects.spring.io/spring-cloud
Pivotal Software, Inc.
@@ -20,47 +21,9 @@
${basedir}/../..
-
-
- org.springframework.boot
- spring-boot-starter-web
-
org.springframework.cloud
- spring-cloud-starter
-
-
- org.springframework.cloud
- spring-cloud-netflix-core
-
-
- org.springframework.cloud
- spring-cloud-netflix-eureka-client
-
-
- com.netflix.eureka
- eureka-client
-
-
- com.netflix.eureka
- eureka-core
-
-
- org.springframework.cloud
- spring-cloud-starter-archaius
-
-
- org.springframework.cloud
- spring-cloud-starter-ribbon
-
-
- com.netflix.ribbon
- ribbon-eureka
-
-
- com.thoughtworks.xstream
- xstream
+ spring-cloud-starter-netflix-eureka-client
diff --git a/spring-cloud-starter-feign/pom.xml b/spring-cloud-starter-feign/pom.xml
index 03b04a16..876cbaca 100644
--- a/spring-cloud-starter-feign/pom.xml
+++ b/spring-cloud-starter-feign/pom.xml
@@ -9,8 +9,9 @@
..
spring-cloud-starter-feign
+ pom
spring-cloud-starter-feign
- Spring Cloud Starter
+ Spring Cloud Starter Feign (deprecated, please use spring-cloud-starter-openfeign)
https://projects.spring.io/spring-cloud
Pivotal Software, Inc.
@@ -22,39 +23,7 @@
org.springframework.cloud
- spring-cloud-starter
-
-
- org.springframework.cloud
- spring-cloud-netflix-core
-
-
- org.springframework
- spring-web
-
-
- org.springframework.cloud
- spring-cloud-commons
-
-
- io.github.openfeign
- feign-core
-
-
- io.github.openfeign
- feign-slf4j
-
-
- io.github.openfeign
- feign-hystrix
-
-
- org.springframework.cloud
- spring-cloud-starter-ribbon
-
-
- org.springframework.cloud
- spring-cloud-starter-archaius
+ spring-cloud-starter-openfeign
diff --git a/spring-cloud-starter-hystrix-dashboard/pom.xml b/spring-cloud-starter-hystrix-dashboard/pom.xml
index 4bf7c3a6..51a6181e 100644
--- a/spring-cloud-starter-hystrix-dashboard/pom.xml
+++ b/spring-cloud-starter-hystrix-dashboard/pom.xml
@@ -9,8 +9,9 @@
..
spring-cloud-starter-hystrix-dashboard
+ pom
spring-cloud-starter-hystrix-dashboard
- Spring Cloud Hystrix Dashboard
+ Spring Cloud Starter Hystrix Dashboard (deprecated, please use spring-cloud-starter-hystrix-dashboard)
https://projects.spring.io/spring-cloud
Pivotal Software, Inc.
@@ -20,21 +21,9 @@
${basedir}/../..
-
- org.springframework.boot
- spring-boot-starter-web
-
org.springframework.cloud
- spring-cloud-starter
-
-
- org.springframework.cloud
- spring-cloud-netflix-hystrix-dashboard
-
-
- org.springframework.cloud
- spring-cloud-starter-archaius
+ spring-cloud-starter-netflix-hystrix-dashboard
diff --git a/spring-cloud-starter-hystrix/pom.xml b/spring-cloud-starter-hystrix/pom.xml
index 6af32fd3..d2ed5f80 100644
--- a/spring-cloud-starter-hystrix/pom.xml
+++ b/spring-cloud-starter-hystrix/pom.xml
@@ -9,8 +9,9 @@
..
spring-cloud-starter-hystrix
+ pom
spring-cloud-starter-hystrix
- Spring Cloud Starter
+ Spring Cloud Starter Hystrix (deprecated, please use spring-cloud-starter-netflix-hystrix)
https://projects.spring.io/spring-cloud
Pivotal Software, Inc.
@@ -22,27 +23,7 @@
org.springframework.cloud
- spring-cloud-starter
-
-
- org.springframework.cloud
- spring-cloud-netflix-core
-
-
- org.springframework.cloud
- spring-cloud-starter-archaius
-
-
- com.netflix.hystrix
- hystrix-core
-
-
- com.netflix.hystrix
- hystrix-metrics-event-stream
-
-
- com.netflix.hystrix
- hystrix-javanica
+ spring-cloud-starter-netflix-hystrix
diff --git a/spring-cloud-starter-netflix/pom.xml b/spring-cloud-starter-netflix/pom.xml
new file mode 100644
index 00000000..22243092
--- /dev/null
+++ b/spring-cloud-starter-netflix/pom.xml
@@ -0,0 +1,29 @@
+
+ 4.0.0
+
+ org.springframework.cloud
+ spring-cloud-netflix
+ 1.4.0.BUILD-SNAPSHOT
+ ..
+
+ spring-cloud-starter-netflix
+ pom
+ Spring Cloud Netflix Starters
+ Spring Cloud Netflix Starters
+
+ spring-cloud-starter-netflix-archaius
+ spring-cloud-starter-netflix-atlas
+ spring-cloud-starter-netflix-eureka-client
+ spring-cloud-starter-netflix-eureka-server
+ spring-cloud-starter-netflix-hystrix
+ spring-cloud-starter-netflix-hystrix-dashboard
+ spring-cloud-starter-netflix-ribbon
+ spring-cloud-starter-netflix-turbine
+ spring-cloud-starter-netflix-spectator
+ spring-cloud-starter-netflix-turbine-amqp
+ spring-cloud-starter-netflix-turbine-stream
+ spring-cloud-starter-netflix-zuul
+ spring-cloud-starter-openfeign
+
+
\ No newline at end of file
diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-archaius/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-archaius/pom.xml
new file mode 100644
index 00000000..f8c9e399
--- /dev/null
+++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-archaius/pom.xml
@@ -0,0 +1,62 @@
+
+ 4.0.0
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix
+ 1.4.0.BUILD-SNAPSHOT
+
+ spring-cloud-starter-netflix-archaius
+ Spring Cloud Starter Netflix Archaius
+ Spring Cloud Starter Netflix Archaius
+ https://projects.spring.io/spring-cloud
+
+ Pivotal Software, Inc.
+ https://www.spring.io
+
+
+ ${basedir}/../../..
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter
+
+
+ org.springframework.cloud
+ spring-cloud-netflix-core
+
+
+ com.netflix.archaius
+ archaius-core
+
+
+
+ commons-configuration
+ commons-configuration
+
+
+ commons-logging
+ commons-logging
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-annotations
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.google.guava
+ guava
+
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-starter-archaius/src/main/resources/META-INF/spring.provides b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-archaius/src/main/resources/META-INF/spring.provides
similarity index 100%
rename from spring-cloud-starter-archaius/src/main/resources/META-INF/spring.provides
rename to spring-cloud-starter-netflix/spring-cloud-starter-netflix-archaius/src/main/resources/META-INF/spring.provides
diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-atlas/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-atlas/pom.xml
new file mode 100644
index 00000000..4e8b8b9c
--- /dev/null
+++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-atlas/pom.xml
@@ -0,0 +1,38 @@
+
+ 4.0.0
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix
+ 1.4.0.BUILD-SNAPSHOT
+
+ spring-cloud-starter-netflix-atlas
+ Spring Cloud Starter Netflix Atlas
+ Spring Cloud Starter Netflix Atlas
+ https://projects.spring.io/spring-cloud
+
+ Pivotal Software, Inc.
+ https://www.spring.io
+
+
+ ${basedir}/../../..
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter
+
+
+ org.springframework.cloud
+ spring-cloud-netflix-core
+
+
+ com.netflix.servo
+ servo-core
+
+
+ com.fasterxml.jackson.dataformat
+ jackson-dataformat-smile
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-starter-atlas/src/main/resources/META-INF/spring.provides b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-atlas/src/main/resources/resources/META-INF/spring.provides
similarity index 100%
rename from spring-cloud-starter-atlas/src/main/resources/META-INF/spring.provides
rename to spring-cloud-starter-netflix/spring-cloud-starter-netflix-atlas/src/main/resources/resources/META-INF/spring.provides
diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-client/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-client/pom.xml
new file mode 100644
index 00000000..7e2a15b7
--- /dev/null
+++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-client/pom.xml
@@ -0,0 +1,64 @@
+
+ 4.0.0
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix
+ 1.4.0.BUILD-SNAPSHOT
+
+ spring-cloud-starter-netflix-eureka-client
+ Spring Cloud Starter Netflix Eureka Client
+ Spring Cloud Starter Netflix Eureka Client
+ https://projects.spring.io/spring-cloud
+
+ Pivotal Software, Inc.
+ https://www.spring.io
+
+
+ ${basedir}/../../..
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.cloud
+ spring-cloud-starter
+
+
+ org.springframework.cloud
+ spring-cloud-netflix-core
+
+
+ org.springframework.cloud
+ spring-cloud-netflix-eureka-client
+
+
+ com.netflix.eureka
+ eureka-client
+
+
+ com.netflix.eureka
+ eureka-core
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-archaius
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-ribbon
+
+
+ com.netflix.ribbon
+ ribbon-eureka
+
+
+ com.thoughtworks.xstream
+ xstream
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-starter-eureka-server/src/main/resources/META-INF/spring.provides b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-client/src/main/resources/META-INF/spring.provides
similarity index 100%
rename from spring-cloud-starter-eureka-server/src/main/resources/META-INF/spring.provides
rename to spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-client/src/main/resources/META-INF/spring.provides
diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-server/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-server/pom.xml
new file mode 100644
index 00000000..9cec711c
--- /dev/null
+++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-server/pom.xml
@@ -0,0 +1,41 @@
+
+ 4.0.0
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix
+ 1.4.0.BUILD-SNAPSHOT
+
+ spring-cloud-starter-netflix-eureka-server
+ Spring Cloud Starter Netflix Eureka Server
+ Spring Cloud Starter Netflix Eureka Server
+ https://projects.spring.io/spring-cloud
+
+ Pivotal Software, Inc.
+ https://www.spring.io
+
+
+ ${basedir}/../../..
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter
+
+
+ org.springframework.cloud
+ spring-cloud-netflix-eureka-server
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-archaius
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-ribbon
+
+
+ com.netflix.ribbon
+ ribbon-eureka
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-starter-eureka/src/main/resources/META-INF/spring.provides b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-server/src/main/resources/META-INF/spring.provides
similarity index 100%
rename from spring-cloud-starter-eureka/src/main/resources/META-INF/spring.provides
rename to spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-server/src/main/resources/META-INF/spring.provides
diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix-dashboard/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix-dashboard/pom.xml
new file mode 100644
index 00000000..658584aa
--- /dev/null
+++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix-dashboard/pom.xml
@@ -0,0 +1,38 @@
+
+ 4.0.0
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix
+ 1.4.0.BUILD-SNAPSHOT
+
+ spring-cloud-starter-netflix-hystrix-dashboard
+ Spring Cloud Starter Netflix Hystrix Dashboard
+ Spring Cloud Starter Netflix Hystrix Dashboard
+ https://projects.spring.io/spring-cloud
+
+ Pivotal Software, Inc.
+ https://www.spring.io
+
+
+ ${basedir}/../../..
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.cloud
+ spring-cloud-starter
+
+
+ org.springframework.cloud
+ spring-cloud-netflix-hystrix-dashboard
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-archaius
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-starter-feign/src/main/resources/META-INF/spring.provides b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix-dashboard/src/main/resources/META-INF/spring.provides
similarity index 100%
rename from spring-cloud-starter-feign/src/main/resources/META-INF/spring.provides
rename to spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix-dashboard/src/main/resources/META-INF/spring.provides
diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix/pom.xml
new file mode 100644
index 00000000..de2e7bd6
--- /dev/null
+++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix/pom.xml
@@ -0,0 +1,46 @@
+
+ 4.0.0
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix
+ 1.4.0.BUILD-SNAPSHOT
+
+ spring-cloud-starter-netflix-hystrix
+ Spring Cloud Starter Netflix Hystrix
+ Spring Cloud Starter Netflix Hystrix
+ https://projects.spring.io/spring-cloud
+
+ Pivotal Software, Inc.
+ https://www.spring.io
+
+
+ ${basedir}/../../..
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter
+
+
+ org.springframework.cloud
+ spring-cloud-netflix-core
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-archaius
+
+
+ com.netflix.hystrix
+ hystrix-core
+
+
+ com.netflix.hystrix
+ hystrix-metrics-event-stream
+
+
+ com.netflix.hystrix
+ hystrix-javanica
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-starter-hystrix/src/main/resources/META-INF/spring.provides b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix/src/main/resources/META-INF/spring.provides
similarity index 100%
rename from spring-cloud-starter-hystrix/src/main/resources/META-INF/spring.provides
rename to spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix/src/main/resources/META-INF/spring.provides
diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-ribbon/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-ribbon/pom.xml
new file mode 100644
index 00000000..73949fbc
--- /dev/null
+++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-ribbon/pom.xml
@@ -0,0 +1,54 @@
+
+ 4.0.0
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix
+ 1.4.0.BUILD-SNAPSHOT
+
+ spring-cloud-starter-netflix-ribbon
+ Spring Cloud Starter Netflix Ribbon
+ Spring Cloud Starter Netflix Ribbon
+ https://projects.spring.io/spring-cloud
+
+ Pivotal Software, Inc.
+ https://www.spring.io
+
+
+ ${basedir}/../../..
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter
+
+
+ org.springframework.cloud
+ spring-cloud-netflix-core
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-archaius
+
+
+ com.netflix.ribbon
+ ribbon
+
+
+ com.netflix.ribbon
+ ribbon-core
+
+
+ com.netflix.ribbon
+ ribbon-httpclient
+
+
+ com.netflix.ribbon
+ ribbon-loadbalancer
+
+
+ io.reactivex
+ rxjava
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-starter-ribbon/src/main/resources/META-INF/spring.provides b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-ribbon/src/main/resources/META-INF/spring.provides
similarity index 100%
rename from spring-cloud-starter-ribbon/src/main/resources/META-INF/spring.provides
rename to spring-cloud-starter-netflix/spring-cloud-starter-netflix-ribbon/src/main/resources/META-INF/spring.provides
diff --git a/spring-cloud-netflix-turbine-stream/.jdk8 b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-spectator/.jdk8
similarity index 100%
rename from spring-cloud-netflix-turbine-stream/.jdk8
rename to spring-cloud-starter-netflix/spring-cloud-starter-netflix-spectator/.jdk8
diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-spectator/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-spectator/pom.xml
new file mode 100644
index 00000000..d7218ea0
--- /dev/null
+++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-spectator/pom.xml
@@ -0,0 +1,30 @@
+
+ 4.0.0
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix
+ 1.4.0.BUILD-SNAPSHOT
+
+ spring-cloud-starter-netflix-spectator
+ Spring Cloud Starter Netflix Spectator
+ Spring Cloud Starter Netflix Spectator
+ https://projects.spring.io/spring-cloud
+
+ Pivotal Software, Inc.
+ https://www.spring.io
+
+
+ ${basedir}/../../..
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter
+
+
+ org.springframework.cloud
+ spring-cloud-netflix-spectator
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-starter-spectator/src/main/resources/META-INF/spring.provides b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-spectator/src/main/resources/META-INF/spring.provides
similarity index 100%
rename from spring-cloud-starter-spectator/src/main/resources/META-INF/spring.provides
rename to spring-cloud-starter-netflix/spring-cloud-starter-netflix-spectator/src/main/resources/META-INF/spring.provides
diff --git a/spring-cloud-starter-spectator/.jdk8 b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-amqp/.jdk8
similarity index 100%
rename from spring-cloud-starter-spectator/.jdk8
rename to spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-amqp/.jdk8
diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-amqp/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-amqp/pom.xml
new file mode 100644
index 00000000..a1e5156e
--- /dev/null
+++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-amqp/pom.xml
@@ -0,0 +1,29 @@
+
+ 4.0.0
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix
+ 1.4.0.BUILD-SNAPSHOT
+
+ spring-cloud-starter-netflix-turbine-amqp
+ Spring Cloud Starter Netflix Turbine AMQP
+ Spring Cloud Starter Netflix Turbine AMQP (deprecated, please use spring-cloud-starter-netflix-turbine-stream)
+ https://projects.spring.io/spring-cloud
+
+ Pivotal Software, Inc.
+ https://www.spring.io
+
+
+ ${basedir}/../../..
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-turbine-stream
+
+
+ org.springframework.cloud
+ spring-cloud-starter-stream-rabbit
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-starter-turbine-amqp/src/main/resources/META-INF/spring.provides b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-amqp/src/main/resources/META-INF/spring.provides
similarity index 100%
rename from spring-cloud-starter-turbine-amqp/src/main/resources/META-INF/spring.provides
rename to spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-amqp/src/main/resources/META-INF/spring.provides
diff --git a/spring-cloud-starter-turbine-amqp/.jdk8 b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-stream/.jdk8
similarity index 100%
rename from spring-cloud-starter-turbine-amqp/.jdk8
rename to spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-stream/.jdk8
diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-stream/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-stream/pom.xml
new file mode 100644
index 00000000..7d60c688
--- /dev/null
+++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-stream/pom.xml
@@ -0,0 +1,50 @@
+
+ 4.0.0
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix
+ 1.4.0.BUILD-SNAPSHOT
+
+ spring-cloud-starter-netflix-turbine-stream
+ Spring Cloud Starter Netflix Turbine Stream
+ Spring Cloud Starter Netflix Turbine Stream
+ https://projects.spring.io/spring-cloud
+
+ Pivotal Software, Inc.
+ https://www.spring.io
+
+
+ ${basedir}/../../..
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-hystrix
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-ribbon
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-archaius
+
+
+ com.netflix.zuul
+ zuul-core
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-starter-turbine-stream/src/main/resources/META-INF/spring.provides b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-stream/src/main/resources/META-INF/spring.provides
similarity index 100%
rename from spring-cloud-starter-turbine-stream/src/main/resources/META-INF/spring.provides
rename to spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-stream/src/main/resources/META-INF/spring.provides
diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine/pom.xml
new file mode 100644
index 00000000..0b930c89
--- /dev/null
+++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine/pom.xml
@@ -0,0 +1,62 @@
+
+ 4.0.0
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix
+ 1.4.0.BUILD-SNAPSHOT
+
+ spring-cloud-starter-netflix-turbine
+ Spring Cloud Starter Netflix Turbine
+ Spring Cloud Starter Netflix Turbine
+ https://projects.spring.io/spring-cloud
+
+ Pivotal Software, Inc.
+ https://www.spring.io
+
+
+ ${basedir}/../../..
+ 1.0.0
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-eureka-client
+
+
+ org.springframework.cloud
+ spring-cloud-netflix-turbine
+
+
+ com.netflix.turbine
+ turbine-core
+ ${turbine.version}
+
+
+ javax.servlet
+ servlet-api
+
+
+ log4j
+ log4j
+
+
+ com.netflix.rxjava
+ rxjava-core
+
+
+ org.slf4j
+ slf4j-simple
+
+
+ org.mockito
+ mockito-all
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-starter-turbine/src/main/resources/META-INF/spring.provides b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine/src/main/resources/META-INF/spring.provides
similarity index 100%
rename from spring-cloud-starter-turbine/src/main/resources/META-INF/spring.provides
rename to spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine/src/main/resources/META-INF/spring.provides
diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-zuul/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-zuul/pom.xml
new file mode 100644
index 00000000..b894180f
--- /dev/null
+++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-zuul/pom.xml
@@ -0,0 +1,50 @@
+
+ 4.0.0
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix
+ 1.4.0.BUILD-SNAPSHOT
+
+ spring-cloud-starter-netflix-zuul
+ Spring Cloud Starter Netflix Zuul
+ Spring Cloud Starter Netflix Zuul
+ https://projects.spring.io/spring-cloud
+
+ Pivotal Software, Inc.
+ https://www.spring.io
+
+
+ ${basedir}/../../..
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-hystrix
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-ribbon
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-archaius
+
+
+ com.netflix.zuul
+ zuul-core
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-starter-zuul/src/main/resources/META-INF/spring.provides b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-zuul/src/main/resources/META-INF/spring.provides
similarity index 100%
rename from spring-cloud-starter-zuul/src/main/resources/META-INF/spring.provides
rename to spring-cloud-starter-netflix/spring-cloud-starter-netflix-zuul/src/main/resources/META-INF/spring.provides
diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-openfeign/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-openfeign/pom.xml
new file mode 100644
index 00000000..e15ef009
--- /dev/null
+++ b/spring-cloud-starter-netflix/spring-cloud-starter-openfeign/pom.xml
@@ -0,0 +1,58 @@
+
+ 4.0.0
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix
+ 1.4.0.BUILD-SNAPSHOT
+
+ spring-cloud-starter-openfeign
+ Spring Cloud Starter OpenFeign
+ Spring Cloud Starter OpenFeign
+ https://projects.spring.io/spring-cloud
+
+ Pivotal Software, Inc.
+ https://www.spring.io
+
+
+ ${basedir}/../../..
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter
+
+
+ org.springframework.cloud
+ spring-cloud-netflix-core
+
+
+ org.springframework
+ spring-web
+
+
+ org.springframework.cloud
+ spring-cloud-commons
+
+
+ io.github.openfeign
+ feign-core
+
+
+ io.github.openfeign
+ feign-slf4j
+
+
+ io.github.openfeign
+ feign-hystrix
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-ribbon
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-archaius
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-starter-hystrix-dashboard/src/main/resources/META-INF/spring.provides b/spring-cloud-starter-netflix/spring-cloud-starter-openfeign/src/main/resources/META-INF/spring.provides
similarity index 100%
rename from spring-cloud-starter-hystrix-dashboard/src/main/resources/META-INF/spring.provides
rename to spring-cloud-starter-netflix/spring-cloud-starter-openfeign/src/main/resources/META-INF/spring.provides
diff --git a/spring-cloud-starter-ribbon/pom.xml b/spring-cloud-starter-ribbon/pom.xml
index bd4c1776..dfcaa27a 100644
--- a/spring-cloud-starter-ribbon/pom.xml
+++ b/spring-cloud-starter-ribbon/pom.xml
@@ -9,8 +9,9 @@
..
spring-cloud-starter-ribbon
+ pom
spring-cloud-starter-ribbon
- Spring Cloud Starter
+ Spring Cloud Starter Ribbon (deprecated, please use spring-cloud-starter-netflix-ribbon)
https://projects.spring.io/spring-cloud
Pivotal Software, Inc.
@@ -22,35 +23,7 @@
org.springframework.cloud
- spring-cloud-starter
-
-
- org.springframework.cloud
- spring-cloud-netflix-core
-
-
- org.springframework.cloud
- spring-cloud-starter-archaius
-
-
- com.netflix.ribbon
- ribbon
-
-
- com.netflix.ribbon
- ribbon-core
-
-
- com.netflix.ribbon
- ribbon-httpclient
-
-
- com.netflix.ribbon
- ribbon-loadbalancer
-
-
- io.reactivex
- rxjava
+ spring-cloud-starter-netflix-ribbon
diff --git a/spring-cloud-starter-spectator/pom.xml b/spring-cloud-starter-spectator/pom.xml
index 14895a91..8145f614 100644
--- a/spring-cloud-starter-spectator/pom.xml
+++ b/spring-cloud-starter-spectator/pom.xml
@@ -9,8 +9,9 @@
..
spring-cloud-starter-spectator
+ pom
spring-cloud-starter-spectator
- Spring Cloud Starter Spectator
+ Spring Cloud Starter Spectator (deprecated, please use spring-cloud-starter-netflix-spectator)
https://projects.spring.io/spring-cloud
Pivotal Software, Inc.
@@ -22,11 +23,7 @@
org.springframework.cloud
- spring-cloud-starter
-
-
- org.springframework.cloud
- spring-cloud-netflix-spectator
+ spring-cloud-starter-netflix-spectator
diff --git a/spring-cloud-starter-turbine-amqp/pom.xml b/spring-cloud-starter-turbine-amqp/pom.xml
index f5297611..1b1082e3 100644
--- a/spring-cloud-starter-turbine-amqp/pom.xml
+++ b/spring-cloud-starter-turbine-amqp/pom.xml
@@ -9,8 +9,9 @@
..
spring-cloud-starter-turbine-amqp
+ pom
spring-cloud-starter-turbine-amqp
- Spring Cloud Starter Turbine AMQP (deprecated, please use spring-cloud-starter-turbine-stream)
+ Spring Cloud Starter Turbine AMQP (deprecated, please use spring-cloud-starter-netflix-turbine-stream)
https://projects.spring.io/spring-cloud
Pivotal Software, Inc.
@@ -22,11 +23,7 @@
org.springframework.cloud
- spring-cloud-starter-turbine-stream
-
-
- org.springframework.cloud
- spring-cloud-starter-stream-rabbit
+ spring-cloud-starter-netflix-turbine-amqp
diff --git a/spring-cloud-starter-turbine-stream/.jdk8 b/spring-cloud-starter-turbine-stream/.jdk8
deleted file mode 100644
index e69de29b..00000000
diff --git a/spring-cloud-starter-turbine-stream/pom.xml b/spring-cloud-starter-turbine-stream/pom.xml
index 5025399f..93bce5c8 100644
--- a/spring-cloud-starter-turbine-stream/pom.xml
+++ b/spring-cloud-starter-turbine-stream/pom.xml
@@ -9,8 +9,9 @@
..
spring-cloud-starter-turbine-stream
+ pom
spring-cloud-starter-turbine-stream
- Spring Cloud Starter Turbine Stream
+ Spring Cloud Starter Turbine Stream (deprecated, please use spring-cloud-starter-netflix-turbine-stream)
https://projects.spring.io/spring-cloud
Pivotal Software, Inc.
@@ -23,56 +24,7 @@
org.springframework.cloud
- spring-cloud-starter-eureka
-
-
- spring-boot-starter-tomcat
- org.springframework.boot
-
-
-
-
- org.springframework.cloud
- spring-cloud-commons
-
-
- org.springframework.cloud
- spring-cloud-starter-archaius
-
-
- org.springframework.cloud
- spring-cloud-netflix-turbine-stream
-
-
- org.springframework.cloud
- spring-cloud-stream
-
-
- com.fasterxml.jackson.core
- jackson-databind
-
-
- com.netflix.turbine
- turbine-core
- ${turbine.version}
-
-
- com.netflix.rxjava
- rxjava-core
-
-
- org.slf4j
- slf4j-simple
-
-
-
-
- io.reactivex
- rxjava
-
-
- org.apache.tomcat.embed
- tomcat-embed-el
+ spring-cloud-starter-netflix-turbine-stream
diff --git a/spring-cloud-starter-turbine/pom.xml b/spring-cloud-starter-turbine/pom.xml
index 001d026c..9087602a 100644
--- a/spring-cloud-starter-turbine/pom.xml
+++ b/spring-cloud-starter-turbine/pom.xml
@@ -9,8 +9,9 @@
..
spring-cloud-starter-turbine
+ pom
spring-cloud-starter-turbine
- Spring Cloud Starter Turbine
+ Spring Cloud Starter Turbine (deprecated, please use spring-cloud-starter-netflix-turbine)
https://projects.spring.io/spring-cloud
Pivotal Software, Inc.
@@ -23,42 +24,7 @@
org.springframework.cloud
- spring-cloud-starter
-
-
- org.springframework.cloud
- spring-cloud-starter-eureka
-
-
- org.springframework.cloud
- spring-cloud-netflix-turbine
-
-
- com.netflix.turbine
- turbine-core
- ${turbine.version}
-
-
- javax.servlet
- servlet-api
-
-
- log4j
- log4j
-
-
- com.netflix.rxjava
- rxjava-core
-
-
- org.slf4j
- slf4j-simple
-
-
- org.mockito
- mockito-all
-
-
+ spring-cloud-starter-netflix-turbine
diff --git a/spring-cloud-starter-zuul/pom.xml b/spring-cloud-starter-zuul/pom.xml
index 24ed16a8..5933fc60 100644
--- a/spring-cloud-starter-zuul/pom.xml
+++ b/spring-cloud-starter-zuul/pom.xml
@@ -9,8 +9,9 @@
..
spring-cloud-starter-zuul
+ pom
spring-cloud-starter-zuul
- Spring Cloud Starter
+ Spring Cloud Starter Zuul (deprecated, please use spring-cloud-starter-netflix-zuul)
https://projects.spring.io/spring-cloud
Pivotal Software, Inc.
@@ -22,31 +23,7 @@
org.springframework.cloud
- spring-cloud-starter
-
-
- org.springframework.boot
- spring-boot-starter-web
-
-
- org.springframework.boot
- spring-boot-starter-actuator
-
-
- org.springframework.cloud
- spring-cloud-starter-hystrix
-
-
- org.springframework.cloud
- spring-cloud-starter-ribbon
-
-
- org.springframework.cloud
- spring-cloud-starter-archaius
-
-
- com.netflix.zuul
- zuul-core
+ spring-cloud-starter-netflix-zuul