Spring Cloud Data Flow参考指南(二)

时间:2022-12-05 18:03:09

Spring Cloud Data Flow参考指南(二)

9.2. 使用 OAuth 2.0 进行身份验证

为了支持身份验证和授权,Spring Cloud Data Flow 使用OAuth 2.0。 它允许您将 Spring Cloud 数据流集成到单点登录 (SSO) 中。 环境。

从Spring Cloud Data Flow 2.0开始,OAuth2是唯一的机制 用于提供身份验证和授权。

使用以下 OAuth2 授权类型:

  • 授权码:用于 GUI(浏览器)集成。访客将被重定向到您的 OAuth 服务进行身份验证
  • 密码:由shell(和REST集成)使用,因此访问者可以使用用户名和密码登录
  • 客户端凭据:直接从 OAuth 提供程序检索访问令牌,并使用授权 HTTP 标头将其传递到数据流服务器

目前,Spring Cloud Data Flow 使用不透明令牌且不透明 令牌 (JWT)。

您可以通过两种方式访问 REST 端点:

  • 基本身份验证,使用密码授权类型向 OAuth2 服务进行身份验证
  • 访问令牌,使用客户端凭据授权类型

当您设置身份验证时,您确实应该启用HTTPS 同样,尤其是在生产环境中。

您可以通过通过设置添加以下内容来打开 OAuth2 身份验证 环境变量。以下示例显示了CloudFoundry 用户帐户和身份验证 (UAA) 服务器所需的最小设置:​​application.yml​

spring:
security:
oauth2:
client:
registration:
uaa:
client-id: myclient
client-secret: mysecret
redirect-uri: '{baseUrl}/login/oauth2/code/{registrationId}'
authorization-grant-type: authorization_code
scope:
- openid
provider:
uaa:
jwk-set-uri: http://uaa.local:8080/uaa/token_keys
token-uri: http://uaa.local:8080/uaa/oauth/token
user-info-uri: http://uaa.local:8080/uaa/userinfo
user-name-attribute: user_name
authorization-uri: http://uaa.local:8080/uaa/oauth/authorize
resourceserver:
opaquetoken:
introspection-uri: http://uaa.local:8080/uaa/introspect
client-id: dataflow
client-secret: dataflow

提供此属性将激活 OAuth2 安全性。

提供程序 ID。可以指定多个提供程序。

由于 UAA 是 OpenID 提供程序,因此必须至少指定范围。

如果提供程序还提供了其他作用域来控制角色分配,您还必须在此处指定这些范围。​​openid​

OpenID 端点。用于检索用户名等用户信息。命令的。

包含用户名的响应的 JSON 属性。

用于内省和验证直接传入的令牌。命令的。

可以使用 curl 验证基本身份验证是否正常工作,如下所示:

curl -u myusername:mypassword http://localhost:9393/ -H 'Accept: application/json'

因此,您应该会看到可用 REST 终结点的列表。

当您使用 Web 浏览器访问根 URL 时,并且 启用安全性后,您将被重定向到仪表板 UI。要查看 REST 端点列表,指定标头。还要确保 使用邮递员​(Chrome)等工具添加标题 或RESTClient​(Firefox)。​​application/json​​​​Accept​​​​Accept​

除了基本身份验证之外,还可以提供访问令牌,以 访问 REST API。为此,请检索 来自 OAuth2 提供程序的 OAuth2 访问令牌,并将该访问令牌传递给 使用授权HTTP 标头的 REST API,如下所示:

$ curl -H "Authorization: Bearer <ACCESS_TOKEN>" http://localhost:9393/ -H 'Accept: application/json'

9.3. 自定义授权

前面的内容主要涉及身份验证,即如何评估 用户的标识。在本节中,我们将讨论可用的授权选项,即谁可以执行哪些操作。

授权规则定义在(部分 弹簧云数据流核心模块)。​​dataflow-server-defaults.yml​

由于安全角色的确定是特定于环境的, 默认情况下,Spring Cloud 数据流将所有角色分配给经过身份验证的 OAuth2 用户。类用于此目的。​​DefaultDataflowAuthoritiesExtractor​

或者,您可以通过以下方式将 Spring 云数据流将 OAuth2 范围映射到数据流角色 将提供程序的布尔属性设置为(默认值为)。 例如,如果提供程序的 ID 是,则属性将是。​​map-oauth-scopes​​​​true​​​​false​​​​uaa​​​​spring.cloud.dataflow.security.authorization.provider-role-mappings.uaa.map-oauth-scopes​

有关更多详细信息,请参阅角色映射一章。

您还可以通过提供自己的 Spring Bean 定义来自定义角色映射行为,该定义是 扩展了Spring Cloud Data Flow的接口。在这种情况下, 自定义 Bean 定义优先于由 春云数据流。​​AuthorityMapper​

默认方案使用七个角色来保护 Spring Cloud Data Flow 公开的REST 端点:

  • ROLE_CREATE:适用于涉及创建的任何内容,例如创建流或任务
  • ROLE_DEPLOY:用于部署流或启动任务
  • ROLE_DESTROY:适用于涉及删除流、任务等的任何内容。
  • ROLE_MANAGE:对于启动管理终结点
  • ROLE_MODIFY:对于涉及改变系统状态的任何内容
  • ROLE_SCHEDULE:用于调度相关操作(如调度任务)
  • ROLE_VIEW:对于与检索状态相关的任何内容

如本节前面所述,指定了所有与授权相关的默认设置 in,它是 Spring Cloud Data Flow Core 的一部分 模块。尽管如此,如果需要,您可以覆盖这些设置,例如, 在。配置采用 YAML 列表的形式(如一些 规则可能优先于其他规则)。因此,您需要复制和粘贴 整个列表并根据您的需求进行定制(因为无法合并列表)。​​dataflow-server-defaults.yml​​​​application.yml​


始终引用您的文件版本,因为以下代码片段可能已过时。​​application.yml​

默认规则如下:

spring:
cloud:
dataflow:
security:
authorization:
enabled: true
loginUrl: "/"
permit-all-paths: "/authenticate,/security/info,/assets/**,/dashboard/logout-success-oauth.html,/favicon.ico"
rules:
# About

- GET /about => hasRole('ROLE_VIEW')

# Audit

- GET /audit-records => hasRole('ROLE_VIEW')
- GET /audit-records/** => hasRole('ROLE_VIEW')

# Boot Endpoints

- GET /management/** => hasRole('ROLE_MANAGE')

# Apps

- GET /apps => hasRole('ROLE_VIEW')
- GET /apps/** => hasRole('ROLE_VIEW')
- DELETE /apps/** => hasRole('ROLE_DESTROY')
- POST /apps => hasRole('ROLE_CREATE')
- POST /apps/** => hasRole('ROLE_CREATE')
- PUT /apps/** => hasRole('ROLE_MODIFY')

# Completions

- GET /completions/** => hasRole('ROLE_VIEW')

# Job Executions & Batch Job Execution Steps && Job Step Execution Progress

- GET /jobs/executions => hasRole('ROLE_VIEW')
- PUT /jobs/executions/** => hasRole('ROLE_MODIFY')
- GET /jobs/executions/** => hasRole('ROLE_VIEW')
- GET /jobs/thinexecutions => hasRole('ROLE_VIEW')

# Batch Job Instances

- GET /jobs/instances => hasRole('ROLE_VIEW')
- GET /jobs/instances/* => hasRole('ROLE_VIEW')

# Running Applications

- GET /runtime/streams => hasRole('ROLE_VIEW')
- GET /runtime/streams/** => hasRole('ROLE_VIEW')
- GET /runtime/apps => hasRole('ROLE_VIEW')
- GET /runtime/apps/** => hasRole('ROLE_VIEW')

# Stream Definitions

- GET /streams/definitions => hasRole('ROLE_VIEW')
- GET /streams/definitions/* => hasRole('ROLE_VIEW')
- GET /streams/definitions/*/related => hasRole('ROLE_VIEW')
- POST /streams/definitions => hasRole('ROLE_CREATE')
- DELETE /streams/definitions/* => hasRole('ROLE_DESTROY')
- DELETE /streams/definitions => hasRole('ROLE_DESTROY')

# Stream Deployments

- DELETE /streams/deployments/* => hasRole('ROLE_DEPLOY')
- DELETE /streams/deployments => hasRole('ROLE_DEPLOY')
- POST /streams/deployments/** => hasRole('ROLE_MODIFY')
- GET /streams/deployments/** => hasRole('ROLE_VIEW')

# Stream Validations

- GET /streams/validation/ => hasRole('ROLE_VIEW')
- GET /streams/validation/* => hasRole('ROLE_VIEW')

# Stream Logs
- GET /streams/logs/* => hasRole('ROLE_VIEW')

# Task Definitions

- POST /tasks/definitions => hasRole('ROLE_CREATE')
- DELETE /tasks/definitions/* => hasRole('ROLE_DESTROY')
- GET /tasks/definitions => hasRole('ROLE_VIEW')
- GET /tasks/definitions/* => hasRole('ROLE_VIEW')

# Task Executions

- GET /tasks/executions => hasRole('ROLE_VIEW')
- GET /tasks/executions/* => hasRole('ROLE_VIEW')
- POST /tasks/executions => hasRole('ROLE_DEPLOY')
- POST /tasks/executions/* => hasRole('ROLE_DEPLOY')
- DELETE /tasks/executions/* => hasRole('ROLE_DESTROY')

# Task Schedules

- GET /tasks/schedules => hasRole('ROLE_VIEW')
- GET /tasks/schedules/* => hasRole('ROLE_VIEW')
- GET /tasks/schedules/instances => hasRole('ROLE_VIEW')
- GET /tasks/schedules/instances/* => hasRole('ROLE_VIEW')
- POST /tasks/schedules => hasRole('ROLE_SCHEDULE')
- DELETE /tasks/schedules/* => hasRole('ROLE_SCHEDULE')

# Task Platform Account List */

- GET /tasks/platforms => hasRole('ROLE_VIEW')

# Task Validations

- GET /tasks/validation/ => hasRole('ROLE_VIEW')
- GET /tasks/validation/* => hasRole('ROLE_VIEW')

# Task Logs
- GET /tasks/logs/* => hasRole('ROLE_VIEW')

# Tools

- POST /tools/** => hasRole('ROLE_VIEW')

每行的格式如下:

HTTP_METHOD URL_PATTERN '=>' SECURITY_ATTRIBUTE

哪里:

  • HTTP_METHOD是一种HTTP方法(如PUT或GET),大写。
  • URL_PATTERN是一种 Ant 样式的 URL 模式。
  • SECURITY_ATTRIBUTE 是一个 SpEL 表达式。请参阅基于表达式的访问控制。
  • 其中每个字符都由一个或空格字符(空格、制表符等)分隔。

请注意,以上是 YAML 列表,而不是地图(因此使用“-”破折号 在每行的开头)位于密钥下。​​spring.cloud.dataflow.security.authorization.rules​

授权 — 外壳和仪表板行为

启用安全性后,仪表板和 shell 是角色感知的, 这意味着,根据分配的角色,并非所有功能都可见。

例如,用户没有必要角色的 shell 命令 标记为不可用。


目前,shell 的命令列出了不可用的命令。 请跟踪以下问题:github.com/spring-projects/spring-shell/issues/115​​help​


相反,对于仪表板,UI 不显示 的页面或页面元素 用户未获得授权。

保护 Spring 引导管理端点

启用安全性后,Spring 启动 HTTP 管理端点的保护方式与其他 REST 端点相同。管理 REST 端点 在下面可用并需要角色。​​/management​​​​MANAGEMENT​

默认配置如下:​​dataflow-server-defaults.yml​

management:
endpoints:
web:
base-path: /management
security:
roles: MANAGE

目前,不应自定义默认管理路径。

9.4. 设置 UAA 身份验证

对于本地部署场景,我们建议使用CloudFoundry 用户 帐户和身份验证 (UAA) 服务器,经过OpenID 认证。 虽然UAA由Cloud Foundry使用, 它也是一个功能齐全的独立OAuth2服务器,具有企业功能,例如LDAP集成。

要求

您需要签出、构建和运行 UAA。为此,请确保您:

  • 使用 Java 8。
  • 安装Git。
  • 安装CloudFoundry UAA命令行客户端。
  • 在同一台计算机上运行时,对 UAA 使用不同的主机名,例如。uaa/

如果在安装uaac 时遇到问题,则可能需要设置环境 变量:​​GEM_HOME​

export GEM_HOME="$HOME/.gem"

您还应该确保已将其添加到您的路径中。​​~/.gem/gems/cf-uaac-4.2.0/bin​

为 JWT 准备 UAA

由于UAA是一个OpenID提供者,并使用JSON Web令牌(JWT),因此它需要具有 用于对这些 JWT 进行签名的私钥:

openssl genrsa -out signingkey.pem 2048
openssl rsa -in signingkey.pem -pubout -out verificationkey.pem
export JWT_TOKEN_SIGNING_KEY=$(cat signingkey.pem)
export JWT_TOKEN_VERIFICATION_KEY=$(cat verificationkey.pem)

稍后,一旦 UAA 启动,您可以在访问时看到密钥。​​uaa:8080/uaa/token_keys​

在这里,网址是主机名。​​uaa​​​​uaa:8080/uaa/token_keys​

下载并启动 UAA

若要下载并安装 UAA,请运行以下命令:

git clone https://github.com/pivotal/uaa-bundled.git
cd uaa-bundled
./mvnw clean install
java -jar target/uaa-bundled-1.0.0.BUILD-SNAPSHOT.jar

UAA 的配置由 YAML 文件驱动,也可以编写配置脚本 使用 UAA 命令行客户端:​​uaa.yml​

uaac target http://uaa:8080/uaa
uaac token client get admin -s adminsecret
uaac client add dataflow \
--name dataflow \
--secret dataflow \
--scope cloud_controller.read,cloud_controller.write,openid,password.write,scim.userids,sample.create,sample.view,dataflow.create,dataflow.deploy,dataflow.destroy,dataflow.manage,dataflow.modify,dataflow.schedule,dataflow.view \
--authorized_grant_types password,authorization_code,client_credentials,refresh_token \
--authorities uaa.resource,dataflow.create,dataflow.deploy,dataflow.destroy,dataflow.manage,dataflow.modify,dataflow.schedule,dataflow.view,sample.view,sample.create\
--redirect_uri http://localhost:9393/login \
--autoapprove openid

uaac group add "sample.view"
uaac group add "sample.create"
uaac group add "dataflow.view"
uaac group add "dataflow.create"

uaac user add springrocks -p mysecret --emails springrocks@someplace.com
uaac user add vieweronly -p mysecret --emails mrviewer@someplace.com

uaac member add "sample.view" springrocks
uaac member add "sample.create" springrocks
uaac member add "dataflow.view" springrocks
uaac member add "dataflow.create" springrocks
uaac member add "sample.view" vieweronly

前面的脚本设置数据流客户端以及两个用户:

  • 用户springrocks具有两个范围:和。sample.viewsample.create
  • 用户查看器只有一个范围:。sample.view

添加后,您可以快速仔细检查 UAA 是否创建了用户:

curl -v -d"username=springrocks&password=mysecret&client_id=dataflow&grant_type=password" -u "dataflow:dataflow" http://uaa:8080/uaa/oauth/token -d 'token_format=opaque'

上述命令应生成类似于以下内容的输出:

*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to uaa (127.0.0.1) port 8080 (#0)
* Server auth using Basic with user 'dataflow'
> POST /uaa/oauth/token HTTP/1.1
> Host: uaa:8080
> Authorization: Basic ZGF0YWZsb3c6ZGF0YWZsb3c=
> User-Agent: curl/7.54.0
> Accept: */*
> Content-Length: 97
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 97 out of 97 bytes
< HTTP/1.1 200
< Cache-Control: no-store
< Pragma: no-cache
< X-XSS-Protection: 1; mode=block
< X-Frame-Options: DENY
< X-Content-Type-Options: nosniff
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Thu, 31 Oct 2019 21:22:59 GMT
<
* Connection #0 to host uaa left intact
{"access_token":"0329c8ecdf594ee78c271e022138be9d","token_type":"bearer","id_token":"eyJhbGciOiJSUzI1NiIsImprdSI6Imh0dHBzOi8vbG9jYWxob3N0OjgwODAvdWFhL3Rva2VuX2tleXMiLCJraWQiOiJsZWdhY3ktdG9rZW4ta2V5IiwidHlwIjoiSldUIn0.eyJzdWIiOiJlZTg4MDg4Ny00MWM2LTRkMWQtYjcyZC1hOTQ4MmFmNGViYTQiLCJhdWQiOlsiZGF0YWZsb3ciXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDkwL3VhYS9vYXV0aC90b2tlbiIsImV4cCI6MTU3MjYwMDE3OSwiaWF0IjoxNTcyNTU2OTc5LCJhbXIiOlsicHdkIl0sImF6cCI6ImRhdGFmbG93Iiwic2NvcGUiOlsib3BlbmlkIl0sImVtYWlsIjoic3ByaW5ncm9ja3NAc29tZXBsYWNlLmNvbSIsInppZCI6InVhYSIsIm9yaWdpbiI6InVhYSIsImp0aSI6IjAzMjljOGVjZGY1OTRlZTc4YzI3MWUwMjIxMzhiZTlkIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImNsaWVudF9pZCI6ImRhdGFmbG93IiwiY2lkIjoiZGF0YWZsb3ciLCJncmFudF90eXBlIjoicGFzc3dvcmQiLCJ1c2VyX25hbWUiOiJzcHJpbmdyb2NrcyIsInJldl9zaWciOiJlOTkyMDQxNSIsInVzZXJfaWQiOiJlZTg4MDg4Ny00MWM2LTRkMWQtYjcyZC1hOTQ4MmFmNGViYTQiLCJhdXRoX3RpbWUiOjE1NzI1NTY5Nzl9.bqYvicyCPB5cIIu_2HEe5_c7nSGXKw7B8-reTvyYjOQ2qXSMq7gzS4LCCQ-CMcb4IirlDaFlQtZJSDE-_UsM33-ThmtFdx--TujvTR1u2nzot4Pq5A_ThmhhcCB21x6-RNNAJl9X9uUcT3gKfKVs3gjE0tm2K1vZfOkiGhjseIbwht2vBx0MnHteJpVW6U0pyCWG_tpBjrNBSj9yLoQZcqrtxYrWvPHaa9ljxfvaIsOnCZBGT7I552O1VRHWMj1lwNmRNZy5koJFPF7SbhiTM8eLkZVNdR3GEiofpzLCfoQXrr52YbiqjkYT94t3wz5C6u1JtBtgc2vq60HmR45bvg","refresh_token":"6ee95d017ada408697f2d19b04f7aa6c-r","expires_in":43199,"scope":"scim.userids openid sample.create cloud_controller.read password.write cloud_controller.write sample.view","jti":"0329c8ecdf594ee78c271e022138be9d"}

通过使用参数,您可以请求令牌为:​​token_format​

  • 不透明
  • 智威汤逊

10. 配置 - 本地

10.1. 功能切换

Spring Cloud Data Flow Server 提供了一组特定的功能,可以在启动时启用/禁用这些功能。这些功能包括以下各项的所有生命周期操作和 REST 终结点(服务器和客户端实现,包括 shell 和 UI):

  • 流(需要船长)
  • 任务
  • 任务计划程序

可以通过在启动数据流服务器时设置以下布尔属性来启用和禁用这些功能:

  • ​spring.cloud.dataflow.features.streams-enabled​
  • ​spring.cloud.dataflow.features.tasks-enabled​
  • ​spring.cloud.dataflow.features.schedules-enabled​

默认情况(需要船长)和任务处于启用状态,任务计划程序默认处于禁用状态。

REST 端点提供有关已启用和禁用的功能的信息。​​/about​

10.2. 数据库

关系数据库用于存储流和任务定义以及已执行任务的状态。 Spring Cloud Data Flow 为 H2、MySQL、Oracle、PostgreSQL​Db2 和SQL Server 提供模式。架构是在服务器启动时自动创建的。

默认情况下,Spring Cloud Data Flow 提供H2数据库的嵌入式实例。H2数据库很好 用于开发目的,但不建议用于生产用途。


不支持将 H2数据库作为外部模式。

MySQL的JDBC驱动程序(通过MariaDB驱动程序),PostgreSQLSQL Server和嵌入式H2无需额外配置即可使用。 如果您使用的是任何其他数据库,则需要将相应的 JDBC 驱动程序 jar 放在服务器的类路径上。

数据库属性可以作为环境变量或命令行参数传递给数据流服务器。

10.2.1. MySQL

以下示例演示如何使用 MariaDB 驱动程序定义 MySQL 数据库连接。

java -jar spring-cloud-dataflow-server/target/spring-cloud-dataflow-server-2.9.6.jar \
--spring.datasource.url=jdbc:mysql://localhost:3306/mydb \
--spring.datasource.username= \
--spring.datasource.password= \
--spring.datasource.driver-class-name=org.mariadb.jdbc.Driver

MySQL版本高达5.7可以与MariaDB驱动程序一起使用。从版本8.0开始,必须使用MySQL自己的驱动程序。

java -jar spring-cloud-dataflow-server/target/spring-cloud-dataflow-server-2.9.6.jar \
--spring.datasource.url=jdbc:mysql://localhost:3306/mydb \
--spring.datasource.username= \
--spring.datasource.password= \
--spring.datasource.driver-class-name=com.mysql.jdbc.Driver


由于许可限制,我们无法捆绑MySQL驱动程序。您需要将其添加到 服务器本身的类路径。

10.2.2. 玛丽亚数据库

以下示例演示如何使用命令行参数定义 MariaDB 数据库连接

java -jar spring-cloud-dataflow-server/target/spring-cloud-dataflow-server-2.9.6.jar \
--spring.datasource.url=jdbc:mariadb://localhost:3306/mydb?useMysqlMetadata=true \
--spring.datasource.username= \
--spring.datasource.password= \
--spring.datasource.driver-class-name=org.mariadb.jdbc.Driver

从 MariaDB v2.4.1 连接器版本开始,还需要添加到 JDBC URL。这是必需的解决方法,直到MySQL和MariaDB完全切换为两个 不同的数据库。​​useMysqlMetadata=true​

MariaDB版本 10.3引入了对真实数据库序列的支持,这是另一个突破 更改时围绕这些数据库的工具完全支持 MySQL 和 MariaDB 作为单独的数据库 类型。解决方法是使用较旧的休眠方言,该方言不会尝试使用序列。

java -jar spring-cloud-dataflow-server/target/spring-cloud-dataflow-server-2.9.6.jar \
--spring.datasource.url=jdbc:mariadb://localhost:3306/mydb?useMysqlMetadata=true \
--spring.datasource.username= \
--spring.datasource.password= \
--spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDB102Dialect \
--spring.datasource.driver-class-name=org.mariadb.jdbc.Driver

10.2.3. PostgreSQL

以下示例演示如何使用命令行参数定义 PostgreSQL 数据库连接:

java -jar spring-cloud-dataflow-server/target/spring-cloud-dataflow-server-2.9.6.jar \
--spring.datasource.url=jdbc:postgresql://localhost:5432/mydb \
--spring.datasource.username= \
--spring.datasource.password= \
--spring.datasource.driver-class-name=org.postgresql.Driver

10.2.4.SQL 服务器

下面的示例演示如何使用命令行参数定义 SQL Server 数据库连接:

java -jar spring-cloud-dataflow-server/target/spring-cloud-dataflow-server-2.9.6.jar \
--spring.datasource.url='jdbc:sqlserver://localhost:1433;databaseName=mydb' \
--spring.datasource.username= \
--spring.datasource.password= \
--spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver

10.2.5. 数据库2

以下示例显示如何使用命令行参数定义 Db2 数据库连接:

java -jar spring-cloud-dataflow-server/target/spring-cloud-dataflow-server-2.9.6.jar \
--spring.datasource.url=jdbc:db2://localhost:50000/mydb \
--spring.datasource.username= \
--spring.datasource.password= \
--spring.datasource.driver-class-name=com.ibm.db2.jcc.DB2Driver


由于许可限制,我们无法捆绑 Db2 驱动程序。您需要将其添加到 服务器本身的类路径。

10.2.6. 甲骨文

以下示例演示如何使用命令行参数定义 Oracle 数据库连接:

java -jar spring-cloud-dataflow-server/target/spring-cloud-dataflow-server-2.9.6.jar \
--spring.datasource.url=jdbc:oracle:thin:@localhost:1521/MYDB \
--spring.datasource.username= \
--spring.datasource.password= \
--spring.datasource.driver-class-name=oracle.jdbc.OracleDriver


由于许可限制,我们无法捆绑 Oracle 驱动程序。您需要将其添加到 服务器本身的类路径。

10.2.7. 添加自定义 JDBC 驱动程序

若要为数据库(例如 Oracle)添加自定义驱动程序,应重新生成数据流服务器并将依赖项添加到 Mavenfile。 您需要修改 mavenofmodule。 GitHub 存储库中有 GA 版本标记,因此您可以切换到所需的 GA 标记,以在生产就绪代码库上添加驱动程序。​​pom.xml​​​​pom.xml​​​​spring-cloud-dataflow-server​

要为 Spring Cloud 数据流服务器添加自定义 JDBC 驱动程序依赖项,请执行以下操作:

  1. 选择与要重建的服务器版本对应的标记,然后克隆 github 存储库。
  2. 编辑 spring-cloud-dataflow-server/pom.xml并在该部分添加所需数据库驱动程序的依赖项。在下面的示例中,已选择甲骨文驱动程序:dependencies
<dependencies>
...
<dependency>
<groupId>com.oracle.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>12.2.0.1</version>
</dependency>
...
</dependencies>
  1. 按照构建 Spring 云数据流中所述构建应用程序

还可以通过在向数据流服务器.yml 文件添加必要的属性来重建服务器时提供默认值, 如下面的PostgreSQL示例所示:

spring:
datasource:
url: jdbc:postgresql://localhost:5432/mydb
username: myuser
password: mypass
driver-class-name:org.postgresql.Driver
  1. 或者,您可以使用构建文件构建自定义 Spring Cloud 数据流服务器。 如果需要添加驱动程序 jar,我们的示例存储库中有一些自定义服务器生成的示例。

10.2.8. 模式处理

在默认数据库架构上,使用Flyway进行管理,如果它很方便 可以向数据库用户授予足够的权限。

以下是启动船服务器时会发生什么的描述:

  • 飞行路线检查是否存在。flyway_schema_history
  • 如果架构不为空,则执行基线(到版本 1)作为数据流表 如果使用共享数据库,则可能就位。
  • 如果模式为空,则飞行路线假定从头开始。
  • 完成所有需要的架构迁移。

下面是启动数据流服务器时发生的情况的说明:

  • 飞行路线检查是否存在。flyway_schema_history_dataflow
  • 如果架构不为空,则执行基线(到版本 1)作为Skipper表 如果使用共享数据库,则可能就位。
  • 如果模式为空,则飞行路线假定从头开始。
  • 完成所有需要的架构迁移。
  • 由于历史原因,如果我们检测到该架构来自1.7.x行 我们将这些转换为从2.0.x开始所需的结构并完全 继续飞行路线。



我们的源代码模式中有​​模式​​ddl,如果使用配置禁用Flyway,则可以手动使用。如果公司的数据库,这是一个不错的选择 受到限制,即应用程序本身无法创建模式。​​spring.flyway.enabled=false​


10.3. 部署程序属性

您可以使用​​本地部署程序​​的以下配置属性来自定义流和任务的部署方式。 使用数据流 shell 进行部署时,可以使用语法。有关外壳用法示例,请参见下文。 在数据流服务器中配置​​本地任务平台​​和在 Skipper 中配置本地平台以部署流时,也会使用这些属性。​​deployer.<appName>.local.<deployerPropertyName>​

部署程序属性名称

描述

默认值

工作目录根

所有创建的进程将在其中运行和创建日志文件的目录。

java.io.tmpdir

envVarsToInherit

传递给已启动应用程序的环境变量的正则表达式模式数组。

< “TMP”、“LANG”、“LANGUAGE”、“LC_.*”、“PATH”、“SPRING_APPLICATION_JSON”> 在 WINDOWS 和 Unix 上<“TMP”、“LANG”、“LANGUAGE”、“LC_.*”、“PATH”>

删除文件退出

是否在 JVM 出口时删除已创建的文件和目录。

javaCmd

运行 java 的命令

.java

关机超时

等待应用关闭的最大秒数。

30

javaOpts

传递给JVM的Java选项,例如-Dtest=foo。

<没有>

继承日志记录

允许将日志记录重定向到触发子进程的进程的输出流。

调试端口

用于远程调试的端口

<没有>

例如,要为流中的时间应用程序设置 Java 选项,请使用以部署属性。​​ticktock​

dataflow:> stream create --name ticktock --definition "time --server.port=9000 | log"
dataflow:> stream deploy --name ticktock --properties "deployer.time.local.javaOpts=-Xmx2048m -Dtest=foo"

为方便起见,您可以设置属性以设置 Java 选项,如以下示例所示:​​deployer.memory​​​​-Xmx​

dataflow:> stream deploy --name ticktock --properties "deployer.time.memory=2048m"

在部署时,如果在属性中指定了选项以及选项的值,则该属性中的值具有优先权。此外,部署应用程序时设置的属性优先于数据流服务器的属性。​​-Xmx​​​​deployer.<app>.local.javaOpts​​​​deployer.<app>.local.memory​​​​javaOpts​​​​javaOpts​​​​spring.cloud.deployer.local.javaOpts​

10.4. 日志记录

Spring Cloud Data Flowserver自动配置为用于日志记录。 日志记录配置位于名为的文件中包含的类路径上。​​local​​​​RollingFileAppender​​​​logback-spring.xml​

默认情况下,日志文件配置为使用:

<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring-cloud-dataflow-server}"/>

使用以下项的登录配置:​​RollingPolicy​

<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_FILE}.log</file>
<rollingPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- daily rolling -->
<fileNamePattern>${LOG_FILE}.${LOG_FILE_ROLLING_FILE_NAME_PATTERN:-%d{yyyy-MM-dd}}.%i.gz</fileNamePattern>
<maxFileSize>${LOG_FILE_MAX_SIZE:-100MB}</maxFileSize>
<maxHistory>${LOG_FILE_MAX_HISTORY:-30}</maxHistory>
<totalSizeCap>${LOG_FILE_TOTAL_SIZE_CAP:-500MB}</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
</appender>

要检查当前的 Spring 云数据流服务器,​​java.io.tmpdir​​​​local​

jinfo <pid> | grep "java.io.tmpdir"

如果要更改或覆盖任何属性,,,,,请将其设置为系统属性。​​LOG_FILE​​​​LOG_PATH​​​​LOG_TEMP​​​​LOG_FILE_MAX_SIZE​​​​LOG_FILE_MAX_HISTORY​​​​LOG_FILE_TOTAL_SIZE_CAP​

10.5. 流

数据流服务器将流生命周期的管理委托给船长服务器。将配置属性设置为船长的位置,例如​​spring.cloud.skipper.client.serverUri​

$ java -jar spring-cloud-dataflow-server-2.9.6.jar --spring.cloud.skipper.client.serverUri=https://192.51.100.1:7577/api

显示流的配置以及部署到哪些平台,是通过在船长服务器上的配置来完成的。 有关详细信息,请参阅​​有关平台​​的文档。​​platform accounts​

10.6. 任务

数据流服务器负责部署任务。 数据流启动的任务将其状态写入数据流服务器使用的同一数据库。 对于作为春季批处理作业的任务,作业和步骤执行数据也存储在此数据库中。 与 Skipper 启动的流一样,任务可以启动到多个平台。 如果未定义平台,则使用类LocalDeployerProperties 的默认值创建平台名称dis,该类在本地部署程序属性表中进行了汇总​​default​

要为本地平台配置新的平台帐户,请在您的文件中的章节下提供一个条目,以便通过另一个支持Spring Boot的机制。 在以下示例中,创建了两个名为 dandand 的本地平台帐户。 诸如 andand 之类的键是本地部署程序属性。​​spring.cloud.dataflow.task.platform.local​​​​application.yaml​​​​localDev​​​​localDevDebug​​​​shutdownTimeout​​​​javaOpts​

spring:
cloud:
dataflow:
task:
platform:
local:
accounts:
localDev:
shutdownTimeout: 60
javaOpts: "-Dtest=foo -Xmx1024m"
localDevDebug:
javaOpts: "-Xdebug -Xmx2048m"

通过定义一个平台,允许您跳过使用原本需要使用的地方。​​default​​​​platformName​

启动任务时,使用任务启动选项传递平台帐户名称的值如果不传递值,则将使用该值。​​--platformName​​​​platformName​​​​default​

将任务部署到多个平台时,任务的配置需要连接到与数据流服务器相同的数据库。

您可以配置本地运行的数据流服务器,以将任务部署到 Cloud Foundry 或 Kubernetes。有关更多信息,请参阅Cloud Foundry任务平台配置和Kubernetes 任务平台配置部分。

有关跨多个平台启动和计划任务的详细示例,请参阅本部分对dataflow.spring.io 上任务的多平台支持。

启动船长
git clone https://github.com/spring-cloud/spring-cloud-skipper.git
cd spring-cloud/spring-cloud-skipper
./mvnw clean package -DskipTests=true
java -jar spring-cloud-skipper-server/target/spring-cloud-skipper-server-2.2.0.BUILD-SNAPSHOT.jar
启动春季云数据流
git clone https://github.com/spring-cloud/spring-cloud-dataflow.git
cd spring-cloud-dataflow
./mvnw clean package -DskipTests=true
cd ..

创建一个包含以下内容的 yaml 文件 scdf.yml:

spring:
cloud:
dataflow:
security:
authorization:
provider-role-mappings:
uaa:
map-oauth-scopes: true
role-mappings:
ROLE_CREATE: foo.create
ROLE_DEPLOY: foo.create
ROLE_DESTROY: foo.create
ROLE_MANAGE: foo.create
ROLE_MODIFY: foo.create
ROLE_SCHEDULE: foo.create
ROLE_VIEW: foo.view
security:
oauth2:
client:
registration:
uaa:
redirect-uri: '{baseUrl}/login/oauth2/code/{registrationId}'
authorization-grant-type: authorization_code
client-id: dataflow
client-secret: dataflow
scope:
- openid
- foo.create
- foo.view
provider:
uaa:
jwk-set-uri: http://uaa:8080/uaa/token_keys
token-uri: http://uaa:8080/uaa/oauth/token
user-info-uri: http://uaa:8080/uaa/userinfo
user-name-attribute: user_name
authorization-uri: http://uaa:8080/uaa/oauth/authorize
resourceserver:
opaquetoken:
introspection-uri: http://uaa:8080/uaa/introspect
client-id: dataflow
client-secret: dataflow

如果使用作用域来标识角色,请确保同时请求

相关范围,例如,不要忘记请求范围​​dataflow.view​​​​dataflow.create​​​​openid​

用于检索个人资料信息,例如用于显示目的的用户名(必填)

用于令牌自检和验证(必需)

当传递外部检索(不透明)时,属性尤其重要 指向 Spring Cloud 数据流的 OAuth 访问令牌。在这种情况下,Spring Cloud Data Flow 将采用 OAuth 访问, 并使用 UAA 的自省令牌端点不仅检查令牌的有效性,还从 UAA 检索关联的 OAuth 范围​​introspection-uri​

最后启动 Spring Cloud 数据流:

java -jar spring-cloud-dataflow/spring-cloud-dataflow-server/target/spring-cloud-dataflow-server-2.4.0.BUILD-SNAPSHOT.jar --spring.config.additional-location=scdf.yml
角色映射

默认情况下,所有角色都分配给登录到 Spring Cloud Data Flow 的用户。 但是,您可以设置该属性:

​spring.cloud.dataflow.security.authorization.provider-role-mappings.uaa.map-oauth-scopes: true​

这将指示底层工程图 OAuth 范围为相应的机构。支持以下范围:​​DefaultAuthoritiesExtractor​

  • 作用域映射到角色dataflow.createCREATE
  • 作用域映射到角色dataflow.deployDEPLOY
  • 作用域映射到角色dataflow.destroyDESTROY
  • 作用域映射到角色dataflow.manageMANAGE
  • 作用域映射到角色dataflow.modifyMODIFY
  • 作用域映射到角色dataflow.scheduleSCHEDULE
  • 作用域映射到角色dataflow.viewVIEW

此外,还可以将任意范围映射到每个数据流角色:

spring:
cloud:
dataflow:
security:
authorization:
provider-role-mappings:
uaa:
map-oauth-scopes: true
role-mappings:
ROLE_CREATE: dataflow.create
ROLE_DEPLOY: dataflow.deploy
ROLE_DESTROY: dataflow.destoy
ROLE_MANAGE: dataflow.manage
ROLE_MODIFY: dataflow.modify
ROLE_SCHEDULE: dataflow.schedule
ROLE_VIEW: dataflow.view

启用从 OAuth 范围到数据流角色的显式映射支持

启用角色映射支持后,必须提供

所有 7 个 Spring Cloud 数据流角色ROLE_CREATEROLE_DEPLOYROLE_DESTROYROLE_MANAGEROLE_MODIFYROLE_SCHEDULEROLE_VIEW


您可以将 OAuth 范围分配给多个 Spring Cloud 数据流角色,从而灵活地确定授权配置的粒度。


10.6.4. LDAP 身份验证

LDAP 身份验证(轻量级目录访问协议)是间接的 由使用 UAA 的 Spring Cloud Data Flow 提供。UAA 本身提供全面的 LDAP 支持。


虽然您可以使用自己的 OAuth2 身份验证服务器,但 LDAP 支持 此处记录要求使用 UAA 作为身份验证服务器。对于任何 其他提供商,请参阅该特定提供商的文档。


UAA 支持针对 LDAP(轻量级目录访问协议)进行身份验证 服务器使用以下模式:

  • 直接绑定
  • 搜索和绑定
  • 搜索和比较


与外部身份提供程序(如 LDAP)集成时,身份验证 在 UAA 内变得链接。UAA 首次尝试进行身份验证 在外部提供程序之前针对 UAA 用户存储的用户凭据, 哎呀。有关更多信息,请参阅用户帐户和身份验证 LDAP 集成GitHub 文档中的链式身份验证。


LDAP 角色映射

OAuth2 身份验证服务器 (UAA) 提供全面的支持 用于将 LDAP 组映射到 OAuth 范围。

存在以下选项:

  • ​ldap/ldap-groups-null.xml​​不会映射任何组
  • ​ldap/ldap-groups-as-scopes.xml​​组名称将从 LDAP 属性中检索。例如CN
  • ​ldap/ldap-groups-map-to-scopes.xml​​组将使用external_group_mapping表映射到 UAA 组

这些值通过配置属性指定。在幕后 这些值引用 Spring XML 配置文件。​​ldap.groups.file controls​


在测试和开发期间,可能需要频繁进行更改 到 LDAP 组和用户,并查看 UAA 中反映的内容。但是,用户 信息在登录期间缓存。以下脚本 有助于快速检索更新的信息:




#!/bin/bash
uaac token delete --all
uaac target http://localhost:8080/uaa
uaac token owner get cf <username> -s "" -p <password>
uaac token client get admin -s adminsecret
uaac user get <username>



LDAP 安全性和 UAA 示例应用程序

为了快速启动和运行并帮助您了解安全架构,我们 在 GitHub 上提供LDAP 安全性和 UAA 示例。


这只是一个演示/示例应用程序,不得在生产中使用。


设置包括:

  • 春云数据流服务器
  • 船长服务器
  • CloudFoundry 用户帐户和身份验证 (UAA) 服务器
  • 轻量级目录访问协议(LDAP)服务器(由Apache Directory Server(ApacheDS)提供)

最终,作为此示例的一部分,您将学习如何配置和启动 a 使用此安全设置的复合任务。

10.6.5. 弹簧安全性 OAuth2 资源/授权服务器示例

对于本地测试和开发,您还可以使用资源和授权 服务器支持由Spring Security OAuth 提供。它 允许您使用以下简单注释轻松创建自己的(非常基本的)OAuth2 服务器:

  • ​@EnableResourceServer​
  • ​@EnableAuthorizationServer​

事实上,UAA在幕后使用Spring Security OAuth2,因此基本端点 都是一样的。

可以在以下位置找到工作示例应用程序:https://github.com/ghillert/oauth-test-server/

克隆项目并使用相应的客户端 ID 和客户端密钥配置 Spring 云数据流:

security:
oauth2:
client:
client-id: myclient
client-secret: mysecret
access-token-uri: http://127.0.0.1:9999/oauth/token
user-authorization-uri: http://127.0.0.1:9999/oauth/authorize
resource:
user-info-uri: http://127.0.0.1:9999/me
token-info-uri: http://127.0.0.1:9999/oauth/check_token

此示例应用程序不适用于生产用途

10.6.6. 数据流外壳身份验证

使用命令行管理程序时,可以通过用户名和密码提供凭据 或通过指定凭据提供程序命令。如果您的 OAuth2 提供程序支持 密码授予类型,您可以使用以下命令启动数据流外壳:

$ java -jar spring-cloud-dataflow-shell-2.9.6.jar         \
--dataflow.uri=http://localhost:9393 \
--dataflow.username=my_username \
--dataflow.password=my_password \
--skip-ssl-validation true \

可选,默认为​​本地主机:9393​​。

命令的。

如果未提供密码,系统会提示用户输入密码。

可选,默认为,忽略证书错误(使用自签名证书时)。慎用!​​false​

请记住,启用 Spring Cloud 数据流的身份验证时, 基础 OAuth2 提供程序必须支持密码OAuth2 授权类型 如果要通过用户名/密码身份验证使用命令行管理程序。

在数据流命令行管理程序中,还可以使用以下命令提供凭据:

server-unknown:>dataflow config server                                \
--uri http://localhost:9393 \
--username myuser \
--password mysecret \
--skip-ssl-validation true \

可选,默认为​​本地主机:9393​​。

命令的。。

如果启用了安全性,但未提供密码,则会提示用户输入密码。

可选,忽略证书错误(使用自签名证书时)。慎用!

下图显示了用于连接和验证数据的典型 shell 命令 流服务器:

Spring Cloud Data Flow参考指南(二)

图1.从命令行管理程序中定位数据流服务器并进行身份验证

成功定位后,应会看到以下输出:

dataflow:>dataflow config info
dataflow config info

╔═══════════╤═══════════════════════════════════════╗
║Credentials│[username='my_username, password=****']║
╠═══════════╪═══════════════════════════════════════╣
║Result │ ║
║Target │http://localhost:9393 ║
╚═══════════╧═══════════════════════════════════════╝

或者,您可以指定凭据提供程序命令,以便 直接传入持有者令牌,而不是提供用户名和密码。 这在 shell 内部工作,或者在启动命令行管理程序时提供命令行参数。​​--dataflow.credentials-provider-command​


使用凭据提供程序命令时,请注意您的 指定的命令必须返回持有者令牌(以持有者为前缀的访问令牌)。 例如,在Unix环境中,可以使用以下简单的命令:




$ java -jar spring-cloud-dataflow-shell-2.9.6.jar \
--dataflow.uri=http://localhost:9393 \
--dataflow.credentials-provider-command="echo Bearer 123456789"



10.7. 关于配置

关于 Restful API 结果的 Spring Cloud 数据流包含一个显示名称, 版本,以及每个主要依赖项的 URL(如果指定) 包括春云数据流。结果(如果启用)还包含 外壳依赖项的 sha1 和/或 sha256 校验和值。信息介绍 为每个依赖项返回的依赖项可通过设置以下内容进行配置 性能:

  • spring.cloud.dataflow.version-info.spring-cloud-dataflow-core.name: 要用于核心的名称。
  • spring.cloud.dataflow.version-info.spring-cloud-dataflow-core.version: 要用于核心的版本。
  • spring.cloud.dataflow.version-info.spring-cloud-dataflow-dashboard.name: 要用于仪表板的名称。
  • spring.cloud.dataflow.version-info.spring-cloud-dataflow-dashboard.version: 要用于仪表板的版本。
  • spring.cloud.dataflow.version-info.spring-cloud-dataflow-implementation.name: 用于实现的名称。
  • spring.cloud.dataflow.version-info.spring-cloud-dataflow-implementation.version: 要用于实现的版本。
  • spring.cloud.dataflow.version-info.spring-cloud-dataflow-shell.name: 要用于外壳的名称。
  • spring.cloud.dataflow.version-info.spring-cloud-dataflow-shell.version: 要用于命令行管理程序的版本。
  • spring.cloud.dataflow.version-info.spring-cloud-dataflow-shell.url: 用于下载外壳依赖项的 URL。
  • spring.cloud.dataflow.version-info.spring-cloud-dataflow-shell.checksum-sha1: the sha1 随外壳依赖项信息一起返回的校验和值。
  • spring.cloud.dataflow.version-info.spring-cloud-dataflow-shell.checksum-sha256: 随外壳依赖项信息一起返回的 SHA256 校验和值。
  • spring.cloud.dataflow.version-info.spring-cloud-dataflow-shell.checksum-sha1-url: 如果未指定,则 SCDF 使用在此 URL 中指定的文件的内容作为校验和。spring.cloud.dataflow.version-info.spring-cloud-dataflow-shell.checksum-sha1
  • spring.cloud.dataflow.version-info.spring-cloud-dataflow-shell.checksum-sha256-url: 如果未指定,则 SCDF 使用在此 URL 中指定的文件的内容作为校验和。spring.cloud.dataflow.version-info.spring-cloud-dataflow-shell.checksum-sha256

10.7.1. 启用 Shell 校验和值

默认情况下,不显示 shell 依赖项的校验和值。如果 您需要启用此功能,请将属性设置为 true。​​spring.cloud.dataflow.version-info.dependency-fetch.enabled​

10.7.2. URL的保留值

有一些保留值(用大括号括起来)可以插入到 确保链接是最新的 URL:

  • 存储库:如果使用 数据流,存储库是指存储库-spring-io存储库。否则,它 指Maven Central。
  • 版本:插入罐子/pom 的版本。

例如,如果您使用的是 Spring Cloud Data Flow Shell 的 1.2.3.RELEASE 版本,则会产生​​myrepository/org/springframework/cloud/spring-cloud-dataflow-shell/{version}/spring-cloud-dataflow-shell-{version}.jar​​​​myrepository/org/springframework/cloud/spring-cloud-dataflow-shell/1.2.3.RELEASE/spring-cloud-dataflow-shell-1.2.3.RELEASE.jar​

11. 配置 - 云铸造厂

本节介绍如何配置 Spring 云数据流服务器的功能,例如安全性以及要使用的关系数据库。 它还描述了如何配置 Spring Cloud Data Flow shell 的功能。

11.1. 功能切换

数据流服务器提供了一组特定的功能,您可以在启动时启用或禁用这些功能。这些功能包括以下各项的所有生命周期操作和 REST 终结点(服务器、客户端实现,包括命令行管理程序和 UI):

  • 任务

可以通过在启动数据流服务器时设置以下布尔属性来启用或禁用这些功能:

  • ​spring.cloud.dataflow.features.streams-enabled​
  • ​spring.cloud.dataflow.features.tasks-enabled​

默认情况下,所有功能都处于启用状态。

REST 端点 () 提供有关已启用和禁用的功能的信息。​​/features​

11.2. 部署程序属性

您可以使用数据流服务器的Cloud Foundry 部署程序的以下配置属性来自定义应用程序的部署方式。 使用数据流 shell 进行部署时,可以使用语法。有关外壳用法示例,请参见下文。 在数据流服务器中配置Cloud Foundry Task平台和在Skipper中配置Kubernetes平台以部署流时,也会使用这些属性。​​deployer.<appName>.cloudfoundry.<deployerPropertyName>​

部署程序属性名称

描述

默认值

服务业

要绑定到已部署应用程序的服务的名称。

<没有>

主机

要用作路由一部分的主机名。

由 Cloud Foundry 派生的主机名

为应用程序映射路由时要使用的域。

<没有>

路线

应用程序应绑定到的路由列表。与主机和域互斥。

<没有>

构建包

用于部署应用程序的构建包。已弃用的内置包。

github.com/cloudfoundry/java-buildpack.git#v4.29.1

构建包

用于部署应用程序的构建包列表。

github.com/cloudfoundry/java-buildpack.git#v4.29.1

记忆

要分配的内存量。默认单位为兆字节,支持“M”和“G”后缀

1024米

磁盘

要分配的磁盘空间量。默认单位是兆字节,支持“M”和“G”后缀。

1024米

健康检查

要对已部署的应用程序执行的运行状况检查的类型。值可以是 HTTP、无、进程和端口

港口

healthCheckHttpEndpoint

http 运行状况检查将使用的路径,

/健康

运行状况检查超时

运行状况检查的超时值(以秒为单位)。

120

实例

要运行的实例数。

1

启用随机应用名称前缀

用于启用使用随机前缀作为应用名称前缀的标志。

接口超时

阻止 API 调用的超时(以秒为单位)。

360

状态超时

状态 API 操作超时(以毫秒为单位)

5000

useSpringApplicationJson

指示应用程序属性是否作为单独的环境变量馈送到或的标志。​​SPRING_APPLICATION_JSON​

暂存超时

为暂存应用程序分配的超时。

15 分钟

启动超时

为启动应用程序分配的超时。

5 分钟

appNamePrefix

用作已部署应用程序名称前缀的字符串

使用部署程序库的应用程序的 Spring Boot 属性。​​spring.application.name​

删除路由

在取消部署应用程序时是否也删除路由。

javaOpts

传递给JVM的Java选项,例如-Dtest=foo。

<没有>

推送任务已启用

是推送任务应用程序还是假定应用程序在启动时已存在。

autoDeleteMavenArtifacts

部署时是否自动从本地存储库中删除 Maven 项目。

环境<密钥>

定义*环境变量。这对于定制 Java 构建包配置非常有用,这些配置必须作为*环境变量包含在应用程序清单中,因为Java 构建包​无法识别。​​SPRING_APPLICATION_JSON​

部署程序确定应用程序的类路径中是否有Java CfEnv​。如果是这样,它将应用所需的配置。

以下是使用 Cloud Foundry 部署属性的一些示例:

  • 您可以设置用于部署每个应用程序的构建包。例如,要使用 Java 脱机回溯, 设置以下环境变量:
cf set-env dataflow-server SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_DEPLOYMENT_BUILDPACKS java_buildpack_offline
  • 设置现已弃用,取而代之的是,如果需要,您可以传递多个设置。有关此内容的更多信息,请参阅Buildpacks如何工作。buildpackbuildpacks
  • 您可以使用环境变量自定义 Cloud Foundry 用于断言应用程序是否正在运行的健康检查机制。当前支持的选项 是(默认值)、和。SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_DEPLOYMENT_HEALTH_CHECKhttpportnone

您还可以设置环境变量,分别指定基于 HTTP 的健康检查终端节点和超时:and。这些默认为(Spring Boot 默认位置)和秒。​​SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_DEPLOYMENT_HEALTH_CHECK_ENDPOINT​​​​SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_DEPLOYMENT_HEALTH_CHECK_TIMEOUT​​​​/health​​​​120​

  • 还可以使用 DSL 指定部署属性。例如,如果要将应用程序的分配内存设置为 512m,并将 mysql 服务绑定到应用程序,则可以运行以下命令:httpjdbc
dataflow:> stream create --name mysqlstream --definition "http | jdbc --tableName=names --columns=name"
dataflow:> stream deploy --name mysqlstream --properties "deployer.http.memory=512, deployer.jdbc.cloudfoundry.services=mysql"


您可以为流应用和任务应用分别配置这些设置。要更改任务的设置, 替换属性名称,如以下示例所示:​​TASK​​​​STREAM​




cf set-env dataflow-server SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_DEPLOYMENT_MEMORY 512



11.3. 任务

数据流服务器负责部署任务。 数据流启动的任务将其状态写入数据流服务器使用的同一数据库。 对于作为春季批处理作业的任务,作业和步骤执行数据也存储在此数据库中。 与船长一样,任务可以启动到多个平台。 当数据流在Cloud Foundry上运行时,必须定义任务平台。 要配置面向Cloud Foundry的新平台帐户,请在您的文件中的章节下提供一个条目,以便通过另一个支持Spring Boot的机制。 在以下示例中,创建了两个名为 dandand 的 Cloud Foundry 平台帐户。 诸如andareCloudFoundry Deployer Properties之类的键。​​spring.cloud.dataflow.task.platform.cloudfoundry​​​​application.yaml​​​​dev​​​​qa​​​​memory​​​​disk​

spring:
cloud:
dataflow:
task:
platform:
cloudfoundry:
accounts:
dev:
connection:
url: https://api.run.pivotal.io
org: myOrg
space: mySpace
domain: cfapps.io
username: user@example.com
password: drowssap
skipSslValidation: false
deployment:
memory: 512m
disk: 2048m
instances: 4
services: rabbit,mysql
appNamePrefix: dev1
qa:
connection:
url: https://api.run.pivotal.io
org: myOrgQA
space: mySpaceQA
domain: cfapps.io
username: user@example.com
password: drowssap
skipSslValidation: true
deployment:
memory: 756m
disk: 724m
instances: 2
services: rabbitQA,mysqlQA
appNamePrefix: qa1


通过定义一个平台,允许您跳过使用原本需要使用的地方。​​default​​​​platformName​

启动任务时,使用任务启动选项传递平台帐户名称的值如果不传递值,则将使用该值。​​--platformName​​​​platformName​​​​default​

您可以配置 Cloud Foundry 上的数据流服务器,以将任务部署到 Cloud Foundry 或 Kubernetes。有关更多信息,请参阅Kubernetes 任务平台配置部分。

有关跨多个平台启动和计划任务的详细示例,请参阅本部分对dataflow.spring.io 上任务的多平台支持。

11.4. 应用程序名称和前缀

为了帮助避免与 Cloud Foundry 中跨空间的路由发生冲突,一种命名策略,它为 已部署的应用程序可用,默认情况下处于启用状态。您可以使用命令覆盖默认配置并设置相应的属性。​​cf set-env​

例如,如果要禁用随机化,可以使用以下命令覆盖它:

cf set-env dataflow-server SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_DEPLOYMENT_ENABLE_RANDOM_APP_NAME_PREFIX false

11.5. 自定义路由

作为随机名称的替代方法,或者为了更好地控制已部署应用使用的主机名,您可以使用 自定义部署属性,如以下示例所示:

dataflow:>stream create foo --definition "http | log"

sdataflow:>stream deploy foo --properties "deployer.http.cloudfoundry.domain=mydomain.com,
deployer.http.cloudfoundry.host=myhost,
deployer.http.cloudfoundry.route-path=my-path"

前面的示例将应用绑定到 URL。请注意,这 示例显示了所有可用的自定义选项。实际上,您只能使用三个中的一个或两个。​​http​​​​myhost.mydomain.com/my-path​

11.6. 码头工人应用程序

从版本 1.2 开始,可以使用 Cloud Foundry 的数据流。

如果使用 Spring Boot 和基于 RabbitMQ 的 Docker 镜像,则可以提供通用的部署属性 以便于将应用程序绑定到 RabbitMQ 服务。假设您的 RabbitMQ 服务已命名,您可以提供以下内容:​​rabbit​

cf set-env dataflow-server SPRING_APPLICATION_JSON '{"spring.cloud.dataflow.applicationProperties.stream.spring.rabbitmq.addresses": "${vcap.services.rabbit.credentials.protocols.amqp.uris}"}'

对于 Spring Cloud Task 应用程序,如果您使用名为的数据库服务实例,则可以使用类似于以下内容的内容:​​mysql​

cf set-env SPRING_DATASOURCE_URL '${vcap.services.mysql.credentials.jdbcUrl}'
cf set-env SPRING_DATASOURCE_USERNAME '${vcap.services.mysql.credentials.username}'
cf set-env SPRING_DATASOURCE_PASSWORD '${vcap.services.mysql.credentials.password}'
cf set-env SPRING_DATASOURCE_DRIVER_CLASS_NAME 'org.mariadb.jdbc.Driver'

对于非 Java 或非引导应用程序,Docker 应用程序必须解析变量才能绑定到任何可用的服务。​​VCAP_SERVICES​


传递应用程序属性


使用非引导应用程序时,您可能希望使用传统 环境变量,而不是使用特殊变量。为此,请将 流和任务的以下变量分别:​​SPRING_APPLICATION_JSON​




SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_DEPLOYMENT_USE_SPRING_APPLICATION_JSON=false



11.7. 应用程序级服务绑定

在 Cloud Foundry 中部署流时,您可以利用特定于应用程序的服务绑定,因此并非全部 服务是为 Spring Cloud Data Flow 编排的所有应用程序全局配置的。

例如,如果您只想为以中的应用程序提供服务绑定 定义中,可以将服务绑定作为部署属性传递:​​mysql​​​​jdbc​

dataflow:>stream create --name httptojdbc --definition "http | jdbc"
dataflow:>stream deploy --name httptojdbc --properties "deployer.jdbc.cloudfoundry.services=mysqlService"

其中,仅专门绑定到应用程序的服务的名称,并且应用程序不会通过此方法获得绑定。​​mysqlService​​​​jdbc​​​​http​

如果要绑定多个服务,则可以将它们作为逗号分隔的项目传递 (例如:)。​​deployer.jdbc.cloudfoundry.services=mysqlService,someService​

11.8. 配置服务绑定参数

CloudFoundry API 支持在绑定服务实例时提供配置参数。某些服务代理需要或 建议绑定配置。 例如,使用 CF CLI 绑定Google Cloud Platform 服务如下所示:

cf bind-service my-app my-google-bigquery-example -c '{"role":"bigquery.user"}'

同样,NFS 卷服务支持绑定配置,例如:

cf bind-service my-app nfs_service_instance -c '{"uid":"1000","gid":"1000","mount":"/var/volume1","readonly":true}'

从版本 2.0 开始,Cloud Foundry 的数据流允许您提供可在应用级别或服务器级别部署属性中提供的绑定配置参数。例如,要绑定到 nfs 服务,如上所述:​​cloudfoundry.services​

dataflow:> stream deploy --name mystream --properties "deployer.<app>.cloudfoundry.services='nfs_service_instance uid:1000,gid:1000,mount:/var/volume1,readonly:true'"

该格式旨在与数据流 DSL 分析器兼容。 通常,部署属性接受逗号分隔的值。 由于逗号还用于分隔配置参数,并避免空格问题,因此包含配置参数的任何项目都必须括在单引号中。有效值包括以下内容:​​cloudfoundry.services​

rabbitmq,'nfs_service_instance uid:1000,gid:1000,mount:/var/volume1,readonly:true',mysql,'my-google-bigquery-example role:bigquery.user'

单引号内允许使用空格,可用于分隔键值对。​​=​​​​:​

11.9. 用户提供的服务

除了市场服务外,Cloud Foundry还支持用户提供的服务(UPS)。在本参考手册中, 已经提到了常规服务,但没有任何内容排除使用用户提供的服务,无论是用作 消息传递中间件(例如,如果您想使用外部 Apache Kafka 安装)或供某些人使用 的流应用程序(例如,Oracle 数据库)。

现在,我们回顾一个从 UPS 提取和提供连接凭据的示例。

以下示例显示了 Apache Kafka 的示例 UPS 设置:

cf create-user-provided-service kafkacups -p '{”brokers":"HOST:PORT","zkNodes":"HOST:PORT"}'

UPS 凭据包装在流中,可以直接在流定义中提供,如 以下示例显示。​​VCAP_SERVICES​

stream create fooz --definition "time | log"
stream deploy fooz --properties "app.time.spring.cloud.stream.kafka.binder.brokers=${vcap.services.kafkacups.credentials.brokers},app.time.spring.cloud.stream.kafka.binder.zkNodes=${vcap.services.kafkacups.credentials.zkNodes},app.log.spring.cloud.stream.kafka.binder.brokers=${vcap.services.kafkacups.credentials.brokers},app.log.spring.cloud.stream.kafka.binder.zkNodes=${vcap.services.kafkacups.credentials.zkNodes}"

11.10. 数据库连接池

从数据流 2.0 开始,Spring 云连接器库不再用于创建数据源。 现在使用库java-cfenv,它允许您设置Spring Boot属性来配置连接池。

11.11. 最大磁盘配额

默认情况下,Cloud Foundry 中的每个应用程序都以 1G 磁盘配额开始,这可以调整为默认最大值 2G。默认最大值也可以通过使用Pivotal Cloud Foundry(PCF)的Ops Manager GUI覆盖至10G。

此配置与 Spring Cloud 数据流相关,因为每个任务部署都由应用程序组成 (通常是Spring Boot uber-jar的),这些应用程序是从远程maven存储库解析的。消解后, 应用程序工件将下载到本地 Maven 存储库以进行缓存和重用。随着这种情况在后台发生, 默认磁盘配额 (1G) 可能会迅速填满,尤其是当我们尝试使用 由独特的应用程序组成。为了克服此磁盘限制和依赖 根据扩展要求,您可能希望将默认最大值从 2G 更改为 10G。让我们回顾一下 更改默认最大磁盘配额分配的步骤。

11.11.1. PCF 的运营经理

从 PCF 的运维管理器中,选择“关键弹性运行时”磁贴,然后导航到“应用程序开发人员控件”选项卡。 将“每个应用的最大磁盘配额 (MB)”设置从 2048 (2G) 更改为 10240 (10G)。保存磁盘配额更新,然后单击 “应用更改”以完成配置覆盖。

11.12. 缩放应用程序

成功应用磁盘配额更改并假设您有一个正在运行的应用程序, 您可以使用 newthrough CF CLI 扩展应用程序,如以下示例所示:​​disk_limit​

→ cf scale dataflow-server -k 10GB

Scaling app dataflow-server in org ORG / space SPACE as user...
OK

....
....
....
....

state since cpu memory disk details
#0 running 2016-10-31 03:07:23 PM 1.8% 497.9M of 1.1G 193.9M of 10G

然后,您可以列出应用程序并查看新的最大磁盘空间,如以下示例所示:

→ cf apps
Getting apps in org ORG / space SPACE as user...
OK

name requested state instances memory disk urls
dataflow-server started 1/1 1.1G 10G dataflow-server.apps.io

11.13. 管理磁盘使用

即使将数据流服务器配置为使用 10G 的空间,也有可能耗尽 本地磁盘上的可用空间。为了防止这种情况,无论部署请求是否成功,从外部源下载的项目(即注册的应用程序 asorresources)都会自动删除。 此行为最适合容器运行时稳定性比部署期间发生的 I/O 延迟更重要的生产环境。 在开发环境中,部署发生的频率更高。此外,theartifact(或 lighterjar)包含描述应用程序配置属性的元数据 它由与应用程序配置相关的各种操作使用,在预生产活动期间更频繁地执行(有关详细信息,请参阅应用程序元数据)。 若要以牺牲预生产环境中的更多磁盘使用量为代价来提供响应速度更快的交互式开发人员体验,可以将 CloudFoundry 部署程序属性设置为。​​jar​​​​http​​​​maven​​​​jar​​​​metadata​​​​autoDeleteMavenArtifacts​​​​false​

如果使用默认运行状况检查类型部署数据流服务器,则必须显式监视服务器上的磁盘空间,以避免空间不足。 如果使用运行状况检查类型部署服务器(请参阅下一个示例),则在磁盘空间不足时将重新启动数据流服务器。 这是由于 Spring Boot 的磁盘空间健康指示器。 您可以使用具有前缀的属性配置磁盘空间运行状况指示器的设置。​​port​​​​http​​​​management.health.diskspace​

对于版本 1.7,我们正在研究如何使用数据流服务器的卷服务来存储项目,然后再将其推送到 Cloud Foundry。​​.jar​

以下示例演示如何将运行状况检查类型部署到调用的终结点:​​http​​​​/management/health​

---
...
health-check-type: http
health-check-http-endpoint: /management/health

11.14. 应用程序解析替代方案

虽然我们建议使用 Maven 工件工厂来注册流应用程序, 在某些情况下,以下替代方法之一可能有意义。

  • 我们已经定制并维护了一个SCDF APP工具,它可以在Cloud Foundry中作为常规的Spring Boot应用程序运行,但它反过来将托管和服务应用程序。 运行时用于 SCDF 的 JAR。
  • 在Spring Boot的帮助下,我们可以在Cloud Foundry中提供静态内容。一个简单的 Spring Boot 应用程序可以捆绑所有必需的流和任务应用程序。通过拥有它 在Cloud Foundry上运行,静态应用程序可以服务于über-jar。例如,您可以从命令行管理程序中注册 具有名称的应用程序通过使用。http-source.jar--uri=http://<Route-To-StaticApp>/http-source.jar
  • über-jar 可以托管在任何可通过 HTTP 访问的外部服务器上。它们可以从原始 GitHub URI 解析 也。例如,在 shell 中,可以使用 Name 注册应用。http-source.jar--uri=http://<Raw_GitHub_URI>/http-source.jar
  • Cloud Foundry中的静态构建包支持是另一个 选择。类似的 HTTP 解决方案也适用于此模型。
  • 批量服务是另一个不错的选择。 所需的 über-jar 可以托管在外部文件系统中。在批量服务的帮助下,您可以 例如,使用名称注册应用程序。http-source.jar--uri=file://<Path-To-FileSystem>/http-source.jar

11.15. 安全

默认情况下,数据流服务器不安全,并在未加密的 HTTP 连接上运行。您可以保护您的 REST 端点 (以及数据流仪表板),通过启用 HTTPS 并要求客户端进行身份验证。 有关保护 REST 端点和配置为针对 OAUTH 后端进行身份验证(在 Cloud Foundry 上运行的 UAA 和 SSO), 请参阅核心[配置-本地-安全性]中的“安全性”部分。您可以在其中配置安全详细信息,也可以通过命令将它们作为环境变量传递。​​dataflow-server.yml​​​​cf set-env​

11.15.1. 身份验证

Spring Cloud Data Flow 可以与 Pivotal Single Sign-On Service 集成 (例如,在 PWS 上)或 Cloud Foundry 用户帐户和身份验证 (UAA) 服务器。

关键单点登录服务

在将 Spring Cloud 数据流部署到 Cloud Foundry 时,可以绑定 应用于 Pivotal 单点登录服务。通过这样做,春天的云 数据流利用Java CFEnv, 它为 OAuth 2.0 提供特定于 Cloud Foundry 的自动配置支持。

为此,请将 Pivotal 单一登录服务绑定到数据流服务器应用程序,然后 提供以下属性:

SPRING_CLOUD_DATAFLOW_SECURITY_CFUSEUAA: false                                                 
SECURITY_OAUTH2_CLIENT_CLIENTID: "${security.oauth2.client.clientId}"
SECURITY_OAUTH2_CLIENT_CLIENTSECRET: "${security.oauth2.client.clientSecret}"
SECURITY_OAUTH2_CLIENT_ACCESSTOKENURI: "${security.oauth2.client.accessTokenUri}"
SECURITY_OAUTH2_CLIENT_USERAUTHORIZATIONURI: "${security.oauth2.client.userAuthorizationUri}"
SECURITY_OAUTH2_RESOURCE_USERINFOURI: "${security.oauth2.resource.userInfoUri}"

重要的是,该属性设置为​​spring.cloud.dataflow.security.cf-use-uaa​​​​false​

非 Cloud Foundry 安全方案同样支持授权。 请参阅核心数据流[配置-本地-安全性]中的安全性部分。

由于角色的预配可能因环境而异,因此我们通过 默认将所有 Spring Cloud 数据流角色分配给用户。

您可以通过提供自己的权限提取器来自定义此行为。

以下示例显示了设置自定义的一种方法:​​AuthoritiesExtractor​​​​UserInfoTokenServices​

public class MyUserInfoTokenServicesPostProcessor
implements BeanPostProcessor {

@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) {
if (bean instanceof UserInfoTokenServices) {
final UserInfoTokenServices userInfoTokenServices == (UserInfoTokenServices) bean;
userInfoTokenServices.setAuthoritiesExtractor(ctx.getBean(AuthoritiesExtractor.class));
}
return bean;
}

@Override
public Object postProcessAfterInitialization(Object bean, String beanName) {
return bean;
}
}

然后,您可以在配置类中声明它,如下所示:

@Bean
public BeanPostProcessor myUserInfoTokenServicesPostProcessor() {
BeanPostProcessor postProcessor == new MyUserInfoTokenServicesPostProcessor();
return postProcessor;
}
Cloud Foundry UAA

Cloud Foundry 用户帐户和身份验证 (UAA) 的可用性取决于 Cloud Foundry 环境。 为了提供UAA集成,您必须提供必要的 OAuth2 配置属性(例如,通过设置属性)。​​SPRING_APPLICATION_JSON​

以下 JSON 示例演示如何创建安全配置:

{
"security.oauth2.client.client-id": "scdf",
"security.oauth2.client.client-secret": "scdf-secret",
"security.oauth2.client.access-token-uri": "https://login.cf.myhost.com/oauth/token",
"security.oauth2.client.user-authorization-uri": "https://login.cf.myhost.com/oauth/authorize",
"security.oauth2.resource.user-info-uri": "https://login.cf.myhost.com/userinfo"
}

默认情况下,该属性设置为 。此属性激活名为的特殊权限提取器。​​spring.cloud.dataflow.security.cf-use-uaa​​​​true​​​​CloudFoundryDataflowAuthoritiesExtractor​

如果您不使用CloudFoundry UAA,则应设置为。​​spring.cloud.dataflow.security.cf-use-uaa​​​​false​

在幕后,这呼唤着Cloud Foundry。 应用程序 API并确保用户实际上是空间开发人员。​​AuthoritiesExtractor​

如果经过身份验证的用户被验证为空间开发人员,则会分配所有角色。

11.16. 配置参考

您必须提供多个配置。这些是 Spring Boot,因此您可以设置 它们作为环境变量或通过 Spring 引导支持的任何其他方式。以下列表在环境中 变量格式,因为这是开始在Cloud Foundry中配置启动应用程序的简单方法。 请注意,将来,您将能够将任务部署到多个平台,但对于 2.0.0.M1,您只能部署到单个平台,并且名称必须是。​​@ConfigurationProperties​​​​default​

# Default values appear after the equal signs.
# Example values, typical for Pivotal Web Services, are included as comments.

# URL of the CF API (used when using cf login -a for example) - for example, https://api.run.pivotal.io
SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_URL=

# The name of the organization that owns the space above - for example, youruser-org
SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_ORG=

# The name of the space into which modules will be deployed - for example, development
SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_SPACE=

# The root domain to use when mapping routes - for example, cfapps.io
SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_DOMAIN=

# The user name and password of the user to use to create applications
SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_USERNAME=
SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_PASSWORD

# The identity provider to be used when accessing the Cloud Foundry API (optional).
# The passed string has to be a URL-Encoded JSON Object, containing the field origin with value as origin_key of an identity provider - for example, {"origin":"uaa"}
SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_LOGIN_HINT=

# Whether to allow self-signed certificates during SSL validation (you should NOT do so in production)
SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_SKIP_SSL_VALIDATION

# A comma-separated set of service instance names to bind to every deployed task application.
# Among other things, this should include an RDBMS service that is used
# for Spring Cloud Task execution reporting, such as my_postgres
SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_DEPLOYMENT_SERVICES
spring.cloud.deployer.cloudfoundry.task.services=

# Timeout, in seconds, to use when doing blocking API calls to Cloud Foundry
SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_DEPLOYMENT_API_TIMEOUT=

# Timeout, in milliseconds, to use when querying the Cloud Foundry API to compute app status
SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_DEPLOYMENT_STATUS_TIMEOUT

请注意,您可以使用快捷方式将 Spring Cloud Deployer-standardand 设置为单个部署请求的一部分,如以下示例所示:​​spring.cloud.deployer.cloudfoundry.services​​​​spring.cloud.deployer.cloudfoundry.buildpacks​​​​spring.cloud.deployer.memory​​​​spring.cloud.deployer.disk​​​​deployer.<app-name>​

stream create --name ticktock --definition "time | log"
stream deploy --name ticktock --properties "deployer.time.memory=2g"

前面示例中的命令使用 2048MB 内存部署时间源,而日志接收器使用默认的 1024MB。

部署流时,还可以将部署属性作为 passas,如以下示例所示:​​JAVA_OPTS​

stream deploy --name ticktock --properties "deployer.time.cloudfoundry.javaOpts=-Duser.timezone=America/New_York"

11.17. 调试

如果您想更好地了解部署流和任务时发生的情况,您可能需要 以打开以下功能:

  • 反应器“堆栈跟踪”,显示发生错误之前涉及哪些操作员。此功能很有帮助,因为部署者 依赖于项目反应器和常规堆栈跟踪可能并不总是允许在错误发生之前了解流程。 请注意,这会带来性能损失,因此默认情况下处于禁用状态。
spring.cloud.dataflow.server.cloudfoundry.debugReactor == true
  • 部署程序和 Cloud Foundry 客户端库请求和响应日志。此功能允许查看之间的详细对话 数据流服务器和 Cloud Foundry 云控制器。
logging.level.cloudfoundry-client == DEBUG

11.18. 弹簧云配置服务器

您可以使用 Spring Cloud Config Server 来集中 Spring Boot 应用程序的配置属性。同样 Spring Cloud Data Flow 和 Spring Cloud Data Flow 编排的应用程序都可以与 配置服务器以使用相同的功能。

11.18.1. 流、任务和 Spring 云配置服务器

与 Spring Cloud Data Flow 服务器类似,您可以配置流和任务应用程序以从配置服务器解析集中属性。 为已部署的应用程序设置属性是绑定到配置服务器的常用方法。 有关更多信息,请参阅Spring 云配置客户端参考指南。 由于此属性可能用于数据流服务器部署的所有应用程序,因此流应用程序的数据流服务器属性和任务应用程序的属性可用于将配置服务器传递给每个已部署的流或任务应用程序。有关详细信息,请参阅通用应用程序属性部分。​​spring.cloud.config.uri​​​​spring.cloud.dataflow.applicationProperties.stream​​​​spring.cloud.dataflow.applicationProperties.task​​​​uri​

请注意,如果使用App Starters 项目中的应用程序,则这些应用程序已经嵌入了依赖项。 如果从头开始构建应用程序并希望添加对配置服务器的客户端支持,则可以添加对配置服务器客户端库的依赖项引用。以下代码片段显示了一个 Maven 示例:​​spring-cloud-services-starter-config-client​

...
<dependency>
<groupId>io.pivotal.spring.cloud</groupId>
<artifactId>spring-cloud-services-starter-config-client</artifactId>
<version>CONFIG_CLIENT_VERSION</version>
</dependency>
...

其中可以是适用于Pivotal Cloud Foundry的Spring Cloud Config Server客户端的最新版本。​​CONFIG_CLIENT_VERSION​

如果使用此库的应用程序无法连接到配置 服务器,当应用程序启动时以及每当访问端点时。 如果您知道您没有使用配置服务器功能,则可以通过将环境变量设置为 来禁用客户端库。​​WARN​​​​/health​​​​SPRING_CLOUD_CONFIG_ENABLED​​​​false​

11.18.2. 示例清单模板

以下 SCDF 和 Skipper模板包括 Skipper 和 Spring Cloud Data Flow 服务器所需的环境变量,以及部署的应用程序和任务,以便在 Cloud Foundry 上成功运行,并在运行时自动解析集中式属性:​​manifest.yml​​​​my-config-server​

---
applications:
- name: data-flow-server
host: data-flow-server
memory: 2G
disk_quota: 2G
instances: 1
path: {PATH TO SERVER UBER-JAR}
env:
SPRING_APPLICATION_NAME: data-flow-server
MAVEN_REMOTE_REPOSITORIES_REPO1_URL: https://repo.spring.io/libs-snapshot
SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_URL: https://api.sys.huron.cf-app.com
SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_ORG: sabby20
SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_SPACE: sabby20
SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_DOMAIN: apps.huron.cf-app.com
SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_USERNAME: admin
SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_PASSWORD: ***
SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_SKIP_SSL_VALIDATION: true
SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_DEPLOYMENT_SERVICES: mysql
SPRING_CLOUD_SKIPPER_CLIENT_SERVER_URI: https://<skipper-host-name>/api
services:
- mysql
- my-config-server

---
applications:
- name: skipper-server
host: skipper-server
memory: 1G
disk_quota: 1G
instances: 1
timeout: 180
buildpack: java_buildpack
path: <PATH TO THE DOWNLOADED SKIPPER SERVER UBER-JAR>
env:
SPRING_APPLICATION_NAME: skipper-server
SPRING_CLOUD_SKIPPER_SERVER_ENABLE_LOCAL_PLATFORM: false
SPRING_CLOUD_SKIPPER_SERVER_STRATEGIES_HEALTHCHECK_TIMEOUTINMILLIS: 300000
SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_URL: https://api.local.pcfdev.io
SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_ORG: pcfdev-org
SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_SPACE: pcfdev-space
SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_DEPLOYMENT_DOMAIN: cfapps.io
SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_USERNAME: admin
SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_PASSWORD: admin
SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_SKIP_SSL_VALIDATION: false
SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_DEPLOYMENT_DELETE_ROUTES: false
SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_DEPLOYMENT_SERVICES: rabbit, my-config-server
services:
- mysql
my-config-server

其中,在Cloud Foundry上运行的Spring Cloud Config Service实例的名称。​​my-config-server​

通过将服务分别绑定到 Spring Cloud Data Flow Server、Spring Cloud Task 和 via Skipper 绑定到所有 Spring Cloud Stream 应用程序,我们现在可以解析此服务支持的集中式属性。

11.18.3. 自签名 SSL 证书和 Spring 云配置服务器

通常,在开发环境中,我们可能没有有效的证书来启用客户端和后端服务之间的 SSL 通信。 但是,Pivotal Cloud Foundry 的配置服务器使用 HTTPS 进行所有客户端到服务的通信,因此我们需要在没有有效证书的环境中添加自签名 SSL 证书。

通过使用上一节中列出的相同模板,我们可以通过设置提供自签名 SSL 证书。​​manifest.yml​​​​TRUST_CERTS: <API_ENDPOINT>​

但是,部署的应用程序还需要一个平面环境变量(而不是包装在里面),因此我们必须用另一组令牌()来指示服务器执行任务。 通过此设置,应用程序将其应用程序属性作为常规环境变量接收。​​TRUST_CERTS​​​​SPRING_APPLICATION_JSON​​​​SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_DEPLOYMENT_USE_SPRING_APPLICATION_JSON: false​

以下清单显示了使用所需更改进行更新的 。数据流服务器和已部署的应用程序 从云配置服务器(部署为Cloud Foundry服务)获取其配置。​​manifest.yml​​​​my-config-server​

---
applications:
- name: test-server
host: test-server
memory: 1G
disk_quota: 1G
instances: 1
path: spring-cloud-dataflow-server-VERSION.jar
env:
SPRING_APPLICATION_NAME: test-server
MAVEN_REMOTE_REPOSITORIES_REPO1_URL: https://repo.spring.io/libs-snapshot
SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_URL: https://api.sys.huron.cf-app.com
SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_ORG: sabby20
SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_SPACE: sabby20
SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_DOMAIN: apps.huron.cf-app.com
SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_USERNAME: admin
SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_PASSWORD: ***
SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_SKIP_SSL_VALIDATION: true
SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_DEPLOYMENT_SERVICES: mysql, config-server
SPRING_CLOUD_SKIPPER_CLIENT_SERVER_URI: https://<skipper-host-name>/api
TRUST_CERTS: <API_ENDPOINT> #this is for the server
SPRING_CLOUD_DATAFLOW_APPLICATION_PROPERTIES_TASK_TRUST_CERTS: <API_ENDPOINT> #this propagates to all tasks
services:
- mysql
- my-config-server #this is for the server

同时将服务添加到船长的清单环境中​​my-config-server​

---
applications:
- name: skipper-server
host: skipper-server
memory: 1G
disk_quota: 1G
instances: 1
timeout: 180
buildpack: java_buildpack
path: <PATH TO THE DOWNLOADED SKIPPER SERVER UBER-JAR>
env:
SPRING_APPLICATION_NAME: skipper-server
SPRING_CLOUD_SKIPPER_SERVER_ENABLE_LOCAL_PLATFORM: false
SPRING_CLOUD_SKIPPER_SERVER_STRATEGIES_HEALTHCHECK_TIMEOUTINMILLIS: 300000
SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_URL: <URL>
SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_ORG: <ORG>
SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_SPACE: <SPACE>
SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_DEPLOYMENT_DOMAIN: <DOMAIN>
SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_USERNAME: <USER>
SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_PASSWORD: <PASSWORD>
SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_DEPLOYMENT_SERVICES: rabbit, my-config-server #this is so all stream applications bind to my-config-server
services:
- mysql
my-config-server

11.19. 配置调度

本节讨论如何配置 Spring 云数据流以连接到PCF 调度程序作为其代理来执行任务。


在按照这些说明操作之前,请确保在您的Cloud Foundry空间中运行PCF调度程序服务的实例。 要在您的空间中创建 PCF 调度程序(假设它在您的市场中),请从 CF CLI 执行以下操作: 服务的名称稍后用于绑定PCF 中正在运行的应用程序。​​cf create-service scheduler-for-pcf standard <name of service>​


对于计划,必须在环境中添加(或更新)以下环境变量:

  • 通过设置启用 Spring 云数据流的计划。spring.cloud.dataflow.features.schedules-enabledtrue
  • 通过将 PCF 调度程序服务名称添加到环境变量,将任务部署程序绑定到 PCF 调度程序实例。SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_DEPLOYMENT_SERVICES
  • 通过设置环境变量建立 PCF 调度程序的 URL。SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_SCHEDULER_SCHEDULER_URL


创建上述配置后,您需要创建任何需要调度的任务定义。


以下示例清单显示了配置的两个环境属性(假设您有一个具有该名称的 PCF 调度程序服务):​​myscheduler​

---
applications:
- name: data-flow-server
host: data-flow-server
memory: 2G
disk_quota: 2G
instances: 1
path: {PATH TO SERVER UBER-JAR}
env:
SPRING_APPLICATION_NAME: data-flow-server
SPRING_CLOUD_SKIPPER_SERVER_ENABLE_LOCAL_PLATFORM: false
SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_URL: <URL>
SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_ORG: <ORG>
SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_SPACE: <SPACE>
SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_DEPLOYMENT_DOMAIN: <DOMAIN>
SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_USERNAME: <USER>
SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_CONNECTION_PASSWORD: <PASSWORD>
SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_DEPLOYMENT_SERVICES: rabbit, myscheduler
SPRING_CLOUD_DATAFLOW_FEATURES_SCHEDULES_ENABLED: true
SPRING_CLOUD_SKIPPER_CLIENT_SERVER_URI: https://<skipper-host-name>/api
SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]_SCHEDULER_SCHEDULER_URL: https://scheduler.local.pcfdev.io
services:
- mysql

其中具有以下格式:​​调度程序.<域名>​​​(用于 示例,​​​scheduler.local.pcfdev.io​​​)。检查_PCF环境中的实际地址。​​SPRING_CLOUD_DATAFLOW_TASK_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[default]SCHEDULER_SCHEDULER_URL

有关跨多个平台启动和计划任务的详细示例,请参阅本部分对dataflow.spring.io​ 上任务的多平台支持。