--- # The name of your project title: Spring Cloud badges: # Customize your project's badges. Delete any entries that do not apply. custom: - name: Source (GitHub) url: https://github.com/spring-cloud icon: github - name: StackOverflow url: https://stackoverflow.com/questions/tagged/spring-cloud icon: stackoverflow --- {% capture billboard_description %} Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. configuration management, service discovery, circuit breakers, intelligent routing, micro-proxy, control bus, one-time tokens, global locks, leadership election, distributed sessions, cluster state). Coordination of distributed systems leads to boiler plate patterns, and using Spring Cloud developers can quickly stand up services and applications that implement those patterns. They will work well in any distributed environment, including the developer's own laptop, bare metal data centres, and managed platforms such as Cloud Foundry. {% endcapture %} {% capture main_content %} Spring Cloud builds on Spring Boot by providing a bunch of libraries that enhance the behaviour of an application when added to the classpath. You can take advantage of the basic default behaviour to get started really quickly, and then when you need to, you can configure or extend to create a custom solution. ## Quick Start The release train label (see below) is actually only used explicitly in one artifact: "spring-cloud-dependencies" (all the others have normal numeric release labels tied to their parent project). The depednencies POM is the one you can use as a BOM for dependency management. Example using the latest version with the config client and eureka (change the artifact ids to pull in other starters): {% include download_widget.md %} ## Features Spring Cloud focuses on providing good out of box experience for typical use cases and extensibility mechanism to cover others. * Distributed/versioned configuration * Service registration and discovery` * Routing * Service-to-service calls * Load balancing * Circuit Breakers * Global locks * Leadership election and cluster state * Distributed messaging Spring Cloud takes a very declarative approach, and often you get a lot of fetaures with just a classpath change and/or an annotation. Example application that is a discovery client: ```java @SpringBootApplication @EnableDiscoveryClient public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` ## Main Projects {% capture project_description %} Centralized external configuration management backed by a git repository. The configuration resources map directly to Spring `Environment` but could be used by non-Spring applications if desired. {% endcapture %} {% include project_block.md site_url="https://cloud.spring.io/spring-cloud-config" repo_url="https://github.com/spring-cloud/spring-cloud-config" project_title="Spring Cloud Config" project_description=project_description %} {% capture project_description %} Integration with various Netflix OSS components (Eureka, Hystrix, Zuul, Archaius, etc.). {% endcapture %} {% include project_block.md site_url="https://cloud.spring.io/spring-cloud-netflix" repo_url="https://github.com/spring-cloud/spring-cloud-netflix" project_title="Spring Cloud Netflix" project_description=project_description %} {% capture project_description %} An event bus for linking services and service instances together with distributed messaging. Useful for propagating state changes across a cluster (e.g. config change events). {% endcapture %} {% include project_block.md site_url="https://cloud.spring.io/spring-cloud-bus" repo_url="https://github.com/spring-cloud/spring-cloud-bus" project_title="Spring Cloud Bus" project_description=project_description %} {% capture project_description %} Integrates your application with Pivotal Cloudfoundry. Provides a service discovery implementation and also makes it easy to implement SSO and OAuth2 protected resources, and also to create a Cloudfoundry service broker. {% endcapture %} {% include project_block.md site_url="https://cloud.spring.io/spring-cloud-cloudfoundry" repo_url="https://github.com/spring-cloud/spring-cloud-cloudfoundry" project_title="Spring Cloud for Cloud Foundry" project_description=project_description %} {% capture project_description %} Leadership election and common stateful patterns with an abstraction and implementation for Zookeeper, Redis, Hazelcast, Consul. {% endcapture %} {% include project_block.md site_url="/spring-cloud" repo_url="https://github.com/spring-cloud/spring-cloud-cluster" project_title="Spring Cloud Cluster" project_description=project_description %} {% capture project_description %} Service discovery and configuration management with Hashicorp Consul. {% endcapture %} {% include project_block.md site_url="https://cloud.spring.io/spring-cloud-consul" repo_url="https://github.com/spring-cloud/spring-cloud-consul" project_title="Spring Cloud Consul" project_description=project_description %} {% capture project_description %} Provides support for load-balanced OAuth2 rest client and authentication header relays in a Zuul proxy. {% endcapture %} {% include project_block.md site_url="https://cloud.spring.io/spring-cloud-security" repo_url="https://github.com/spring-cloud/spring-cloud-security" project_title="Spring Cloud Security" project_description=project_description %} {% capture project_description %} Distributed tracing for Spring Cloud applications, compatible with Zipkin, HTrace and log-based (e.g. ELK) tracing. {% endcapture %} {% include project_block.md site_url="https://cloud.spring.io/spring-cloud-sleuth" repo_url="https://github.com/spring-cloud/spring-cloud-sleuth" project_title="Spring Cloud Sleuth" project_description=project_description %} {% capture project_description %} A cloud native programming and operating model for composable data microservices on a structured platform. {% endcapture %} {% include project_block.md site_url="https://cloud.spring.io/spring-cloud-dataflow" repo_url="https://github.com/spring-cloud/spring-cloud-dataflow" project_title="Spring Cloud Data Flow" project_description=project_description %} {% capture project_description %} Messaging microservices with Redis, Rabbit or Kafka. Simple declarative model to send and receive messages in a Spring Cloud app. {% endcapture %} {% include project_block.md site_url="https://cloud.spring.io/spring-cloud-stream" repo_url="https://github.com/spring-cloud/spring-cloud-stream" project_title="Spring Cloud Stream" project_description=project_description %} {% capture project_description %} Spring Cloud Stream Modules can be used with Spring Cloud Stream to create, build, and scale message-driven data microservices. {% endcapture %} {% include project_block.md site_url="https://cloud.spring.io/spring-cloud-stream-modules" repo_url="https://github.com/spring-cloud/spring-cloud-stream-modules" project_title="Spring Cloud Stream Modules" project_description=project_description %} {% capture project_description %} Short lived microservices. Simple declarative for adding both functional and non-functional features to Spring Boot apps. {% endcapture %} {% include project_block.md site_url="https://cloud.spring.io/spring-cloud-task" repo_url="https://github.com/spring-cloud/spring-cloud-task" project_title="Spring Cloud Task" project_description=project_description %} {% capture project_description %} Service discovery and configuration management with Apache Zookeeper. {% endcapture %} {% include project_block.md site_url="https://cloud.spring.io/spring-cloud-zookeeper" repo_url="https://github.com/spring-cloud/spring-cloud-zookeeper" project_title="Spring Cloud Zookeeper" project_description=project_description %} {% capture project_description %} Easy integration with hosted Amazon Web Services. It offers a convenient way to interact with AWS provided services using well-known Spring idioms and APIs, such as the messaging or caching API. Developers can build their application around the hosted services without having to care about infrastructure or maintenance. {% endcapture %} {% capture site_url %} {{ site.projects_site_url }}/spring-cloud-aws {% endcapture %} {% include project_block.md site_url=site_url repo_url="https://github.com/spring-cloud/spring-cloud-aws" project_title="Spring Cloud for Amazon Web Services" project_description=project_description %} {% capture project_description %} Makes it easy for PaaS applications in a variety of platforms to connect to backend services like databases and message brokers (the project formerly known as "Spring Cloud"). {% endcapture %} {% capture site_url %} {{ site.projects_site_url }}/spring-cloud-connectors {% endcapture %} {% include project_block.md site_url=site_url repo_url="https://github.com/spring-cloud/spring-cloud-connectors" project_title="Spring Cloud Connectors" project_description=project_description %} {% capture project_description %} Spring Boot-style starter projects to ease dependency management for consumers of Spring Cloud. (Discontinued as a project and merged with the other projects after Angel.SR2.) {% endcapture %} {% include project_block.md site_url="https://github.com/spring-cloud/spring-cloud-starters" repo_url="https://github.com/spring-cloud/spring-cloud-starters" project_title="Spring Cloud Starters" project_description=project_description %} {% capture project_description %} Spring Boot CLI plugin for creating Spring Cloud component applications quickly in Groovy {% endcapture %} {% include project_block.md site_url="https://github.com/spring-cloud/spring-cloud-cli" repo_url="https://github.com/spring-cloud/spring-cloud-cli" project_title="Spring Cloud CLI" project_description=project_description %} ## Release Trains Spring Cloud is an umbrella project consisting of independent projects with, in principle, different release cadences. To manage the protfolio a BOM (Bill of Materials) is published with a curated set of dependencies on the individual project (see below). The release trains have names, not versions, to avoid confusion with the sub-projects. The names are an alphabetic sequence (so you can sort them chronologically) with names of London Tube stations ("Angel" is the first release, "Brixton" is the second). When point releases of the individual projects accumulate to a critical mass, or if there is a critical bug in one of them that needs to be available to everyone, the release train will push out "service releases" with names ending ".SRX", where "X" is a number. Release train contents: |Component|Angel.SR6 | Brixton.RC2 | Brixton.BUILD-SNAPSHOT | |---------|----------------------------|---------------|------------------------| |spring-cloud-aws | 1.0.4.RELEASE | 1.1.0.RC2 | 1.1.0.BUILD-SNAPSHOT | |spring-cloud-bus | 1.0.3.RELEASE | 1.1.0.RC2 | 1.1.0.BUILD-SNAPSHOT | |spring-cloud-cli | 1.0.6.RELEASE | 1.1.0.RC2 | 1.1.0.BUILD-SNAPSHOT | |spring-cloud-commons | 1.0.5.RELEASE | 1.1.0.RC3 | 1.1.0.BUILD-SNAPSHOT | |spring-cloud-config | 1.0.4.RELEASE | 1.1.0.RC2 | 1.1.0.BUILD-SNAPSHOT | |spring-cloud-netflix | 1.0.7.RELEASE | 1.1.0.RC2 | 1.1.0.BUILD-SNAPSHOT | |spring-cloud-security | 1.0.3.RELEASE | 1.1.0.RC2 | 1.1.0.BUILD-SNAPSHOT | |spring-cloud-starters | 1.0.6.RELEASE | | | |spring-cloud-cloudfoundry | | 1.0.0.RC2 | 1.0.0.BUILD-SNAPSHOT | |spring-cloud-cluster | | 1.0.0.RC2 | 1.0.0.BUILD-SNAPSHOT | |spring-cloud-consul | | 1.0.0.RC2 | 1.0.0.BUILD-SNAPSHOT | |spring-cloud-sleuth | | 1.0.0.RC2 | 1.0.0.BUILD-SNAPSHOT | |spring-cloud-stream | | 1.0.0.RC2 | 1.0.0.BUILD-SNAPSHOT | |spring-cloud-zookeeper | | 1.0.0.RC2 | 1.0.0.BUILD-SNAPSHOT | |spring-boot | 1.2.8.RELEASE| 1.3.3.RELEASE | 1.3.3.RELEASE | |spring-cloud-stream-app-starters* | | | 1.0.0.BUILD-SNAPSHOT | |spring-cloud-task* | | | 1.0.0.BUILD-SNAPSHOT | (*) These projects are not yet part of Brixton but they will be when they are released The Angel release train builds on Spring Boot 1.2.x, and is incompatible in some areas with Spring Boot 1.3.x. Brixton builds on Spring Boot 1.3.x and is similarly incompatible with 1.2.x. Some libraries and most apps built on Angel will run fine on Brixton, but changes will be required anywhere that the OAuth2 features from spring-cloud-security 1.0.x are used (they were mostly moved to Spring Boot in 1.3.0). Use your dependency management tools to control the version. If you are using Maven remember that the first version declared wins, so declare the BOMs in order, with the first one usually being the most recent (e.g. if you want to use Spring Boot 1.3.4 with Brixton.RC2, put the Boot BOM first). The same rule applies to Gradle if you use the Spring dependency management plugin. > NOTE: starting after Brixton.M4 the release train contains a > `spring-cloud-starter-dependencies` as well as the > `spring-cloud-starter-parent`. Use the parent as you would > the `spring-boot-starter-parent` (if you are using Maven). > If you only need dependency management, the "dependencies" > version is a BOM-only version of the same thing (it just > contains dependency management and no plugin declarations > or direct references to Spring or Spring Boot). If you are > using the Spring Boot parent POM, then you can use the BOM from > Spring Cloud. {% endcapture %} {% capture related_resources %} ### Sample Projects * [Config Server](https://github.com/spring-cloud-samples/configserver) * [Service Registry](https://github.com/spring-cloud-samples/eureka) * [Circuit Breaker Dashboard](https://github.com/spring-cloud-samples/hystrix-dashboard) * [Business Application](https://github.com/spring-cloud-samples/customers-stores) (Customers and Stores) * [OAuth2 Authorization Server](https://github.com/spring-cloud-samples/authserver) * [OAuth2 SSO Client](https://github.com/spring-cloud-samples/sso) * [Integration Test Samples](https://github.com/spring-cloud-samples/tests) {% endcapture %} {% include project_page.html %}