spring-cloud-cloudfoundry.md 3.9 KB
Newer Older
茶陵後's avatar
茶陵後 已提交
1 2 3 4
# Spring Cloud for Cloud Foundry

Table of Contents

5 6 7 8
- [Spring Cloud for Cloud Foundry](#spring-cloud-for-cloud-foundry)
  - [[1. Discovery](#discovery)](#1-discovery)
  - [[2. Single Sign On](#single-sign-on)](#2-single-sign-on)
  - [[3. Configuration](#configuration)](#3-configuration)
M
Mao 已提交
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

Spring Cloud for Cloudfoundry makes it easy to run[Spring Cloud](https://github.com/spring-cloud) apps in[Cloud Foundry](https://github.com/cloudfoundry) (the Platform as a
Service). Cloud Foundry has the notion of a "service", which is
middlware that you "bind" to an app, essentially providing it with an
environment variable containing credentials (e.g. the location and
username to use for the service).

The `spring-cloud-cloudfoundry-commons` module configures the
Reactor-based Cloud Foundry Java client, v 3.0, and can be used standalone.

The `spring-cloud-cloudfoundry-web` project provides basic support for
some enhanced features of webapps in Cloud Foundry: binding
automatically to single-sign-on services and optionally enabling
sticky routing for discovery.

The `spring-cloud-cloudfoundry-discovery` project provides an
implementation of Spring Cloud Commons `DiscoveryClient` so you can`@EnableDiscoveryClient` and provide your credentials as`spring.cloud.cloudfoundry.discovery.[username,password]` (also `*.url` if you are not connecting to [Pivotal Web Services](https://run.pivotal.io)) and then you
can use the `DiscoveryClient` directly or via a `LoadBalancerClient`.

The first time you use it the discovery client might be slow owing to
the fact that it has to get an access token from Cloud Foundry.

茶陵後's avatar
茶陵後 已提交
31
## [](#discovery)[1. Discovery](#discovery)
M
Mao 已提交
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

Here’s a Spring Cloud app with Cloud Foundry discovery:

app.groovy

```
@Grab('org.springframework.cloud:spring-cloud-cloudfoundry')
@RestController
@EnableDiscoveryClient
class Application {

  @Autowired
  DiscoveryClient client

  @RequestMapping('/')
  String home() {
    'Hello from ' + client.getLocalServiceInstance()
  }

}
```

If you run it without any service bindings:

```
$ spring jar app.jar app.groovy
$ cf push -p app.jar
```

It will show its app name in the home page.

The `DiscoveryClient` can lists all the apps in a space, according to
the credentials it is authenticated with, where the space defaults to
the one the client is running in (if any). If neither org nor space
are configured, they default per the user’s profile in Cloud Foundry.

茶陵後's avatar
茶陵後 已提交
68
## [](#single-sign-on)[2. Single Sign On](#single-sign-on)
M
Mao 已提交
69 70 71 72 73 74 75 76 77 78 79

|   |All of the OAuth2 SSO and resource server features moved to Spring Boot<br/>in version 1.3. You can find documentation in the[Spring Boot user guide](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/).|
|---|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|

This project provides automatic binding from CloudFoundry service
credentials to the Spring Boot features. If you have a CloudFoundry
service called "sso", for instance, with credentials containing
"client\_id", "client\_secret" and "auth\_domain", it will bind
automatically to the Spring OAuth2 client that you enable with`@EnableOAuth2Sso` (from Spring Boot). The name of the service can be
parameterized using `spring.oauth2.sso.serviceId`.

茶陵後's avatar
茶陵後 已提交
80
## [](#configuration)[3. Configuration](#configuration)
M
Mao 已提交
81 82 83

To see the list of all Spring Cloud Sloud Foundry related configuration properties please check [the Appendix page](appendix.html).

茶陵後's avatar
茶陵後 已提交
84
if (window.parent == window) {(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1\*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','//www.google-analytics.com/analytics.js','ga');ga('create', 'UA-2728886-23', 'auto', {'siteSpeedSampleRate': 100});ga('send', 'pageview');}