# Spring Cloud for Cloud Foundry

Spring Cloud for CloudFoundry 使得在Cloud Foundry (opens new window)(平台即服务)中运行Spring Cloud (opens new window)应用程序变得很容易。Cloud Foundry 有一个“服务”的概念,这是一个可以“绑定”到应用程序的中间软件,本质上为它提供了一个包含凭据的环境变量(例如,用于服务的位置和用户名)。

spring-cloud-cloudfoundry-commons模块配置了基于反应堆的 Cloud Foundry Java 客户端 V3.0,并且可以独立使用。

spring-cloud-cloudfoundry-web项目为 Cloud Foundry 中 WebApps 的一些增强功能提供了基本支持:自动绑定到单点登录服务,并可选地为发现启用粘性路由。

spring-cloud-cloudfoundry-discovery项目提供了 Spring Cloud CommonsDiscoveryClient的实现,因此你可以@EnableDiscoveryClient并提供你的凭据为spring.cloud.cloudfoundry.discovery.[username,password](如果你没有连接到Pivotal Web 服务 (opens new window),也可以*.url),然后你可以直接使用DiscoveryClient,或者通过LoadBalancerClient

第一次使用 Discovery 客户机时,由于它必须从 Cloud Foundry 获得一个访问令牌,因此它可能会比较慢。

# 1.发现

以下是一款带有 Cloud Foundry Discovery 的 Spring Cloud应用:

App.Groovy

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

  @Autowired
  DiscoveryClient client

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

}

如果你在没有任何服务绑定的情况下运行它:

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

它将在主页中显示其应用程序名称。

DiscoveryClient可以根据经过身份验证的凭据列出一个空间中的所有应用程序,该空间默认为客户端运行的空间(如果有的话)。如果既不配置组织也不配置空间,那么在 Cloud Foundry 中,它们默认为用户的配置文件。

# 2.单点登录

在版本 1.3 中,所有的 OAuth2SSO 和资源服务器功能都移到了 Spring boot
。你可以在Spring Boot user guide (opens new window)中找到文档。

该项目提供了从 CloudFoundry 服务凭据到 Spring 启动特性的自动绑定。例如,如果你有一个名为“SSO”的 CloudFoundry 服务,其凭据包含“client_id”、“client_secret”和“auth_domain”,那么它将自动绑定到你通过@EnableOAuth2Sso(从 Spring 启动)启用的 Spring OAuth2 客户端。服务的名称可以使用spring.oauth2.sso.serviceId进行参数化。

# 3.配置

要查看所有 Spring Cloud Foundry 相关配置属性的列表,请检查附录页