附录

遇到 Spring Cloud Data Flow 问题,我们愿意提供帮助!spring-doc.cn

附录 A:数据流模板

如 API 指南一章中所述,Spring Cloud Data Flow 的功能完全通过 REST 端点公开。 虽然您可以直接使用这些终端节点,但 Spring Cloud Data Flow 还提供了一个基于 Java 的 API,这使得使用这些 REST 终端节点变得更加容易。spring-doc.cn

中心入口点是包中的类。DataFlowTemplateorg.springframework.cloud.dataflow.rest.clientspring-doc.cn

此类实现接口并委托给以下子模板,这些子模板为每个功能集提供特定功能:DataFlowOperationsspring-doc.cn

接口 描述

StreamOperationsspring-doc.cn

用于流操作的 REST 客户端spring-doc.cn

CounterOperationsspring-doc.cn

用于计数器操作的 REST 客户端spring-doc.cn

FieldValueCounterOperationsspring-doc.cn

用于字段值计数器操作的 REST 客户端spring-doc.cn

AggregateCounterOperationsspring-doc.cn

用于聚合计数器操作的 REST 客户端spring-doc.cn

TaskOperationsspring-doc.cn

用于任务操作的 REST 客户端spring-doc.cn

JobOperationsspring-doc.cn

用于作业操作的 REST 客户端spring-doc.cn

AppRegistryOperationsspring-doc.cn

用于应用程序注册表操作的 REST 客户端spring-doc.cn

CompletionOperationsspring-doc.cn

用于完成操作的 REST 客户端spring-doc.cn

RuntimeOperationsspring-doc.cn

用于运行时操作的 REST 客户端spring-doc.cn

初始化时,可以通过 REST 关系发现子模板,这些关系由 HATEOAS(超媒体作为应用程序状态的引擎)提供。DataFlowTemplatespring-doc.cn

如果无法解析资源,则会产生相应的子模板 在 NULL 中。一个常见的原因是 Spring Cloud Data Flow 允许特定的 启动时要启用或禁用的功能集。有关更多信息,请参阅本地Cloud FoundryKubernetes 配置章节之一,具体取决于您部署应用程序的位置。

A.1. 使用数据流模板

当您使用数据流模板时,唯一需要的数据流依赖项是 Spring Cloud Data Flow Rest 客户端,如以下 Maven 代码片段所示:spring-doc.cn

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-dataflow-rest-client</artifactId>
  <version>2.7.2</version>
</dependency>

通过该依赖项,您可以获得类以及调用 Spring Cloud Data Flow 服务器所需的所有依赖项。DataFlowTemplatespring-doc.cn

实例化 时,您还会传入一个 . 请注意,所需的需要一些额外的配置才能在 . 当将 a 声明为 bean 时,以下配置就足够了:DataFlowTemplateRestTemplateRestTemplateDataFlowTemplateRestTemplatespring-doc.cn

  @Bean
  public static RestTemplate restTemplate() {
    RestTemplate restTemplate = new RestTemplate();
    restTemplate.setErrorHandler(new VndErrorResponseErrorHandler(restTemplate.getMessageConverters()));
    for(HttpMessageConverter<?> converter : restTemplate.getMessageConverters()) {
      if (converter instanceof MappingJackson2HttpMessageConverter) {
        final MappingJackson2HttpMessageConverter jacksonConverter =
            (MappingJackson2HttpMessageConverter) converter;
        jacksonConverter.getObjectMapper()
            .registerModule(new Jackson2HalModule())
            .addMixIn(JobExecution.class, JobExecutionJacksonMixIn.class)
            .addMixIn(JobParameters.class, JobParametersJacksonMixIn.class)
            .addMixIn(JobParameter.class, JobParameterJacksonMixIn.class)
            .addMixIn(JobInstance.class, JobInstanceJacksonMixIn.class)
            .addMixIn(ExitStatus.class, ExitStatusJacksonMixIn.class)
            .addMixIn(StepExecution.class, StepExecutionJacksonMixIn.class)
            .addMixIn(ExecutionContext.class, ExecutionContextJacksonMixIn.class)
            .addMixIn(StepExecutionHistory.class, StepExecutionHistoryJacksonMixIn.class);
      }
    }
    return restTemplate;
  }
您还可以使用RestTemplateDataFlowTemplate.getDefaultDataflowRestTemplate();

现在,您可以使用以下代码实例化 :DataFlowTemplatespring-doc.cn

DataFlowTemplate dataFlowTemplate = new DataFlowTemplate(
    new URI("http://localhost:9393/"), restTemplate);         (1)
1 指向 Spring Cloud Data Flow Server 的 ROOT。URI

根据您的要求,您现在可以调用服务器。例如 如果要获取当前可用应用程序的列表,可以运行以下代码:spring-doc.cn

PagedResources<AppRegistrationResource> apps = dataFlowTemplate.appRegistryOperations().list();

System.out.println(String.format("Retrieved %s application(s)",
    apps.getContent().size()));

for (AppRegistrationResource app : apps.getContent()) {
  System.out.println(String.format("App Name: %s, App Type: %s, App URI: %s",
    app.getName(),
    app.getType(),
    app.getUri()));
}

A.2. 数据流模板和安全性

使用 时,您还可以提供所有与安全性相关的 选项,就像您使用的是数据流 Shell 一样。事实上,数据流 Shell 使用 for 其所有操作。DataFlowTemplateDataFlowTemplatespring-doc.cn

为了让您开始使用,我们提供了一个使用 builder pattern 设置各种与安全性相关的选项:HttpClientConfigurerspring-doc.cn

	HttpClientConfigurer
		.create(targetUri)                                             (1)
		.basicAuthCredentials(username, password)                      (2)
		.skipTlsCertificateVerification()                              (3)
		.withProxyCredentials(proxyUri, proxyUsername, proxyPassword)  (4)
		.addInterceptor(interceptor)                                   (5)
		.buildClientHttpRequestFactory()                               (6)
1 使用提供的目标 URI 创建 HttpClientConfigurer。
2 设置基本身份验证的凭据(使用 OAuth2 密码授予)
3 跳过 SSL 证书验证(仅用于开发!)
4 配置任何代理设置
5 添加自定义拦截器,例如设置 OAuth2 Authorization 标头。这允许 u 传递 OAuth2 访问令牌,而不是用户名/密码凭证。
6 构建可在 上设置的 。ClientHttpRequestFactoryRestTemplate

配置完成后,您可以使用它来构建 ,然后设置相应的 属性。然后,你可以使用该 .HttpClientConfigurerbuildClientHttpRequestFactoryClientHttpRequestFactoryRestTemplateDataFlowTemplateRestTemplatespring-doc.cn

要配置基本身份验证,需要进行以下设置:spring-doc.cn

	RestTemplate restTemplate = DataFlowTemplate.getDefaultDataflowRestTemplate();
	HttpClientConfigurer httpClientConfigurer = HttpClientConfigurer.create("http://localhost:9393");

	httpClientConfigurer.basicAuthCredentials("my_username", "my_password");
	restTemplate.setRequestFactory(httpClientConfigurer.buildClientHttpRequestFactory());

	DataFlowTemplate dataFlowTemplate = new DataFlowTemplate("http://localhost:9393", restTemplate);

您可以在 spring-cloud-dataflow-samples 存储库中找到示例应用程序 在 GitHub 上。spring-doc.cn

附录 B:“操作方法”指南

本节提供了一些常见的“我该怎么做......“的问题。spring-doc.cn

如果您有我们在此处未涵盖的特定问题,您可能需要查看 stackoverflow.com 以查看是否有人已经提供了答案。 这也是提出新问题的好地方(使用标签)。spring-cloud-dataflowspring-doc.cn

我们也非常乐意扩展此部分。如果您想添加 “how-to”,可以向我们发送拉取请求spring-doc.cn

B.1. 配置 Maven 属性

在启动数据流服务器时,可以通过命令行属性设置 Maven 属性,例如本地 Maven 存储库位置、远程 Maven 存储库、身份验证凭据和代理服务器属性。 或者,可以通过设置数据流服务器的 environment 属性来设置属性。SPRING_APPLICATION_JSONspring-doc.cn

如果使用 Maven 存储库解析应用程序,则需要显式配置远程 Maven 存储库,但数据流服务器除外。 其他数据流服务器实现(使用 Maven 资源进行应用程序构件解析)没有远程存储库的默认值。 服务器已作为默认远程存储库。locallocalrepo.spring.io/libs-snapshotspring-doc.cn

要将属性作为命令行选项传递,请使用类似于以下内容的命令运行服务器:spring-doc.cn

$ java -jar <dataflow-server>.jar --maven.localRepository=mylocal
--maven.remote-repositories.repo1.url=https://repo1
--maven.remote-repositories.repo1.auth.username=repo1user
--maven.remote-repositories.repo1.auth.password=repo1pass
--maven.remote-repositories.repo2.url=https://repo2 --maven.proxy.host=proxyhost
--maven.proxy.port=9018 --maven.proxy.auth.username=proxyuser
--maven.proxy.auth.password=proxypass

您还可以使用 environment 属性:SPRING_APPLICATION_JSONspring-doc.cn

export SPRING_APPLICATION_JSON='{ "maven": { "local-repository": "local","remote-repositories": { "repo1": { "url": "https://repo1", "auth": { "username": "repo1user", "password": "repo1pass" } },
"repo2": { "url": "https://repo2" } }, "proxy": { "host": "proxyhost", "port": 9018, "auth": { "username": "proxyuser", "password": "proxypass" } } } }'

以下是格式良好的 JSON 中的相同内容:spring-doc.cn

SPRING_APPLICATION_JSON='{
  "maven": {
    "local-repository": "local",
    "remote-repositories": {
      "repo1": {
        "url": "https://repo1",
        "auth": {
          "username": "repo1user",
          "password": "repo1pass"
        }
      },
      "repo2": {
        "url": "https://repo2"
      }
    },
    "proxy": {
      "host": "proxyhost",
      "port": 9018,
      "auth": {
        "username": "proxyuser",
        "password": "proxypass"
      }
    }
  }
}'
根据 Spring Cloud Data Flow 服务器实现,您可能必须使用特定于平台的环境设置功能来传递环境属性。例如,在 Cloud Foundry 中,您可以将它们传递为 .cf set-env SPRING_APPLICATION_JSON

B.2. 故障排除

本节介绍如何在您选择的平台上对 Spring Cloud Data Flow 进行故障排除。请参阅微型网站的 StreamBatch processing 的疑难解答部分。spring-doc.cn

B.3. 常见问题

在本节中,我们将回顾 Spring Cloud Data Flow 的常见问题。 有关更多信息,请参阅微型网站的“常见问题”部分。spring-doc.cn

附录 C:架构

本附录介绍如何构建 Spring Cloud Data Flow。spring-doc.cn

要构建源代码,您需要安装 JDK 1.8。spring-doc.cn

该版本使用 Maven 包装器,因此您不必安装特定版本的 Maven。spring-doc.cn

主要的 build 命令如下:spring-doc.cn

$ ./mvnw clean install

要加快构建速度,您可以添加以避免运行测试。-DskipTestsspring-doc.cn

您也可以自行安装 Maven (>=3.3.3) 并运行命令来代替以下示例中的命令。 如果这样做,则如果本地 Maven 设置不包含 Spring 预发布工件的存储库声明,则可能还需要添加。mvn./mvnw-P spring
您可能需要通过设置值类似于 的环境变量来增加 Maven 可用的内存量。 我们尝试在配置中涵盖这一点,因此,如果您发现必须这样做才能使构建成功,请提交一个票证以将设置添加到源代码控制中。MAVEN_OPTS-Xmx512m -XX:MaxPermSize=128m.mvn

C.1. 文档

有一个生成文档的配置文件。您只能使用以下命令构建文档:fullspring-doc.cn

$ ./mvnw clean package -DskipTests -P full -pl {project-artifactId} -am

C.2. 使用代码

如果您没有最喜欢的 IDE,我们建议您在处理代码时使用 Spring Tools SuiteEclipse。 我们使用 m2eclipse Eclipse 插件来支持 Maven。 其他 IDE 和工具通常也可以正常工作。spring-doc.cn

C.2.1. 使用 m2eclipse 导入 Eclipse

在使用 Eclipse 时,我们建议使用 m2eclipe eclipse 插件。 如果您尚未安装 m2eclipse,可以从 Eclipse Marketplace 获取它。spring-doc.cn

遗憾的是,m2e 尚不支持 Maven 3.3。 因此,一旦项目被导入到 Eclipse 中,您还需要告诉 m2eclipse 将该文件用于项目。 如果不这样做,您可能会看到许多与项目中的 POM 相关的不同错误。 为此,请执行以下操作:.settings.xmlspring-doc.cn

  1. 打开 Eclipse 首选项。spring-doc.cn

  2. 展开 Maven 首选项spring-doc.cn

  3. 选择 User Settings (用户设置)。spring-doc.cn

  4. User Settings 字段中,单击 Browse 并导航到您导入的 Spring Cloud 项目。spring-doc.cn

  5. 选择该项目中的文件。.settings.xmlspring-doc.cn

  6. 单击 Applyspring-doc.cn

  7. 单击 OK。spring-doc.cn

或者,您可以将存储库设置从 Spring Cloud 的 .settings.xml 文件复制到您自己的文件中。~/.m2/settings.xml

C.2.2. 在没有 m2eclipse 的情况下导入到 Eclipse 中

如果您不想使用 m2eclipse,则可以使用以下命令生成 Eclipse 项目元数据:spring-doc.cn

$ ./mvnw eclipse:eclipse

您可以通过从 File 菜单中选择 Import existing projects 来导入生成的 Eclipse 项目。spring-doc.cn