# Sharing Spring Cloud Data Flow’s Datastore with Tasks

正如 [Tasks](https://docs.spring.io/spring-cloud-dataflow/docs/2.1.0.RELEASE/reference/htmlsingle/#spring-cloud-dataflow-task) 文档中所讨论的，Spring Cloud Data Flow 允许用户查看 Spring Cloud Task App 的执行情况。因此，在本节中，我们将讨论 Task Application 和 Spring Cloud Data Flow 共享任务执行信息的相关内容。

## 1. Common DataStore Dependency

Spring Cloud Data Flow 支持许多开箱即用的数据库，因此使用者通常要做的是声明`spring_datasource_*`环境变量用来确认 Spring Cloud Data Flow 需要使用哪些数据库。因此，无论您决定将哪个数据库用于Spring Cloud Data Flow，都要确保您的 Task 在其`pom.xml`或`gradle.build`文件中包含该数据库依赖项。如果任务应用程序中不存在Spring Cloud  Data Flow 使用的数据库依赖关系，则 Task 将失败，执行将不会被记录。

## 2. Common Data Store

Spring Cloud Data Flow 和 Task Applications 必须访问同一个数据库实例。这样，Spring Cloud Data Flow 可以读取 Task Applictaions 记录的任务执行，并且在 Shell 和Dashboard 视图中列出它们。此外，Task Applications 必须具有Spring Cloud Data Flow 使用的数据库中相关 Task 的表的读写权限。

基于对T ask Applications 和 Spring Cloud Data Flow 之间的 DataSource 依赖关系的理解，让我们回顾一下如何在各种Task Orchestration （任务编排）场景中应用它们。

### **2.1. Simple Task Launch**

当 Spring Cloud Data Flow 启动了一个 Task ，Data Flow 会将它的数据源属性（`spring.datasource.url`，`spring.datasource.driverClassName`，`spring.datasource.username`，`spring.datasource.password`）添加到正在启动过程中的 Task Applications 属性中。因此， Task Applications 会连接到 Data Flow 数据库中，并且将信息保存到对应的 Task  表中。

### **2.2. Task Launcher Sink**

Task 启动时， [Data Flow Task Launcher Sink](https://github.com/spring-cloud-stream-app-starters/tasklauncher-dataflow) 始终使用 Data Flow Server 配置的 Task 数据库。

Task Launcher Sink 是可以独自使用的，它支持您将 Task 执行信息存储在指定的单独数据库中。由于这些 Task Launchers 并不使用 Data Flow Server，因此它们运行再指定环境中，需要配置其他参数，包括数据源配置以及 Task Applications 的可执行jar的资源位置。此外，这种方式并没有像 Data Flow Task Launcher 那样提供限制并发运行任务数量的方法。

附加配置需要更复杂形式的 [TaskLaunchRequest](https://docs.spring.io/spring-cloud-task/docs/current/apidocs/org/springframework/cloud/task/launcher/TaskLaunchRequest.html) 。由独立 Task Application Sink 处理的请求必须包含所需的数据源信息作为 Applicantions 属性或命令行参数。既  [TaskLaunchRequest-Transform](https://github.com/spring-cloud-stream-app-starters/tasklaunchrequest-transform/blob/master/spring-cloud-starter-stream-processor-tasklaunchrequest-transform/README.adoc) 和 [TriggerTask Source](https://github.com/spring-cloud-stream-app-starters/triggertask/blob/master/spring-cloud-starter-stream-source-triggertask/README.adoc) 提供的例子。

目前，独立 `tasklauncher` Sink支持的平台是：

* [local](https://github.com/spring-cloud-stream-app-starters/tasklauncher-local)
* [Cloud Foundry](https://github.com/spring-cloud-stream-app-starters/tasklauncher-cloudfoundry)
* [Kubernetes](https://github.com/spring-cloud-stream-app-starters/tasklauncher-kubernetes)

{% hint style="danger" %}
`tasklauncher-local` 仅用于开发。
{% endhint %}

### **2.3. Composed Task Runner**

&#x20;Spring Cloud Data Flow 允许用户创建 directed graph（有向图），其中图的每个节点都是一个 Task Applications ，这是通过 [Composed Task Runner ](https://github.com/spring-cloud-task-app-starters/composed-task-runner/blob/master/spring-cloud-starter-task-composedtaskrunner/README.adoc)完成的。在这种情况下，应用于 [Simple Task Launch](https://docs.spring.io/spring-cloud-dataflow/docs/2.1.0.RELEASE/reference/htmlsingle/#datasource-simple-task-launch) 或 [Task Launcher Sink](https://docs.spring.io/spring-cloud-dataflow/docs/2.1.0.RELEASE/reference/htmlsingle/#datasource-task-launcher-sink) 的规则也适用于 composed task runner。所有子 Applicatnion 必须能够访问 composed task runner 正在使用的数据库。此外，所有子 Applicatnion 必须具有与 Composed Task 相同的数据库依赖。
