附录

在使用 Spring Cloud Data Flow 时遇到困难,我们想帮忙!spring-doc.cadn.net.cn

附录A:数据流模板

正如API指南章节所述,Spring Cloud数据流的功能完全通过REST端点开放。 虽然你可以直接使用这些端点,但Spring Cloud Data Flow还提供了一个基于Java的API,使使用这些REST端点更加简单。spring-doc.cadn.net.cn

中央入口点为DataFlowTemplateorg.springframework.cloud.dataflow.rest.client包。spring-doc.cadn.net.cn

该类实现了数据流作接口并委派到以下子模板,这些子模板为每个功能集提供具体功能:spring-doc.cadn.net.cn

接口 描述

StreamOperationsspring-doc.cadn.net.cn

流作的 REST 客户端spring-doc.cadn.net.cn

反击行动spring-doc.cadn.net.cn

计数器作的 REST 客户端spring-doc.cadn.net.cn

场值反作战spring-doc.cadn.net.cn

字段值计数作的 REST 客户端spring-doc.cadn.net.cn

总反作战spring-doc.cadn.net.cn

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

任务作spring-doc.cadn.net.cn

任务作的 REST 客户端spring-doc.cadn.net.cn

工作运营spring-doc.cadn.net.cn

作业作的 REST 客户端spring-doc.cadn.net.cn

应用注册管理spring-doc.cadn.net.cn

用于应用注册表作的 REST 客户端spring-doc.cadn.net.cn

完工运营spring-doc.cadn.net.cn

完备作的 REST 客户端spring-doc.cadn.net.cn

运行时作spring-doc.cadn.net.cn

运行时作的 REST 客户端spring-doc.cadn.net.cn

DataFlowTemplate正在初始化时,子模板可以通过HATEOAS(Hypermedia as the Engine of Application State)提供的REST关系来发现。spring-doc.cadn.net.cn

如果某个资源无法解析,相应的子模板会得到结果 在NULL中。一个常见原因是Spring Cloud Data Flow允许特定的 启动时需启用或禁用的功能集合。更多信息请参阅本地Cloud FoundryKubernetes 配置章节,具体取决于你部署应用的地点。

A.1. 使用数据流模板

使用数据流模板时,唯一需要的数据流依赖是 Spring Cloud 数据流 Rest 客户端,如以下 Maven 摘要所示:spring-doc.cadn.net.cn

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

有了这种依赖,你会得到DataFlowTemplate以及调用 Spring Cloud Data Flow 服务器所需的所有依赖。spring-doc.cadn.net.cn

当实例化DataFlowTemplate,你也通过了Rest模板. 注意,所需的Rest模板需要某些额外的配置才能在DataFlowTemplate. 当声明Rest模板作为豆子,以下配置即可满足:spring-doc.cadn.net.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;
  }
你也可以买一个预配置的Rest模板通过DataFlowTemplate.getDefaultDataflowRestTemplate();

现在你可以实例化DataFlowTemplate代码如下:spring-doc.cadn.net.cn

DataFlowTemplate dataFlowTemplate = new DataFlowTemplate(
    new URI("http://localhost:9393/"), restTemplate);         (1)
1 URI指向你 Spring Cloud 数据流服务器的根节点。

根据你的需求,你现在可以拨打电话给服务器。例如 如果你想获取当前可用应用的列表,可以运行以下代码:spring-doc.cadn.net.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()));
}

答:2. 数据流模板与安全性

当使用DataFlowTemplate你也可以提供所有与安全相关的 就像你在使用数据流壳一样。事实上,数据流壳采用DataFlowTemplate所有的行动。spring-doc.cadn.net.cn

为了让你开始,我们提供了HttpClientConfigurer使用建构商 模式以设置各种安全相关选项:spring-doc.cadn.net.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授权头部。这允许 你通过传递一个OAuth2访问Tokens,而不是用户名/密码凭证。
6 建造ClientHttpRequestFactory可以设置为Rest模板.

一旦HttpClientConfigurer配置后,你可以使用buildClientHttpRequestFactory以建造ClientHttpRequestFactory然后将相应的 财产Rest模板.然后你可以实例化实际DataFlowTemplate利用该方法Rest模板.spring-doc.cadn.net.cn

要配置基础认证,需要进行以下设置:spring-doc.cadn.net.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.cadn.net.cn

附录B:“作指南”

本节为常见问题解答了“我该如何做到......这些问题在使用 Spring Cloud Data Flow 时经常会出现。spring-doc.cadn.net.cn

如果你有我们这里未涵盖的具体问题,建议查看 stackoverflow.com 是否有人已经给出了答案。 那里也是提问新问题的好地方(使用以下内容)Spring-cloud-dataflow标签)。spring-doc.cadn.net.cn

我们也非常乐意延长这一部分。如果你想添加“作指南”,可以向我们发送拉取请求spring-doc.cadn.net.cn

B.1. 配置Maven属性

你可以在启动数据流服务器时通过命令行属性设置 Maven 属性,如本地 Maven 仓库位置、远程 Maven 仓库、认证凭证和代理服务器属性。 或者,你可以通过设置SPRING_APPLICATION_JSON数据流服务器的环境属性。spring-doc.cadn.net.cn

如果应用程序通过 Maven 仓库解析,则需要显式配置远程 Maven 仓库,除非当地数据流服务器。其他数据流服务器实现(使用Maven资源进行应用工件解析)没有远程仓库的默认值。 这当地服务器有repo.spring.io/libs-snapshot作为默认的远程仓库。spring-doc.cadn.net.cn

要将属性作为命令行选项传递,运行服务器时,命令类似于以下内容:spring-doc.cadn.net.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

你也可以使用SPRING_APPLICATION_JSON环境特性:spring-doc.cadn.net.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.cadn.net.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。请参见微站点的故障排除部分,了解处理和批处理spring-doc.cadn.net.cn

B.3. 常见问题解答

在本节中,我们将回顾春季云数据流的常见问题解答。更多信息请参见微型网站的常见问题解答部分。spring-doc.cadn.net.cn

附录C:架构

本附录描述了如何构建 Spring Cloud 数据流。spring-doc.cadn.net.cn

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

该构建使用Maven包装,这样你就不需要安装特定版本的Maven。spring-doc.cadn.net.cn

主要构建命令如下:spring-doc.cadn.net.cn

$ ./mvnw clean install

为了加快构建速度,你可以添加-Dskip测试为了避免做测试。spring-doc.cadn.net.cn

你也可以自己安装 Maven (>=3.3.3) 并运行MVN指挥 代替./mvnw下面的例子。如果你这样做,你可能还需要添加-PSpring如果你的本地 Maven 设置没有包含 Spring 预发布工件的仓库声明。
你可能需要通过设置 a 来增加 Maven 可用的内存容量MAVEN_OPTS环境变量的值类似于-Xmx512m -XX:MaxPermSize=128m. 我们试图在.mvn配置,如果你发现必须这样做才能让构建成功,请提交工单,把设置添加到源码控制中。

C.1. 文档

有一个生成文档的配置文件。您可以使用以下命令仅构建文档:spring-doc.cadn.net.cn

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

C.2. 与规范合作

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

C.2.1. 用m2eclipse导入Eclipse

我们推荐使用 M2eclipe Eclipse 插件。如果您还没有安装 m2eclipse,可以在 Eclipse 市场购买。spring-doc.cadn.net.cn

遗憾的是,m2e 目前还不支持 Maven 3.3。因此,一旦项目导入到 Eclipse,你还需要告诉 m2eclipse 使用.settings.xml为项目提交文件。如果不这样做,你可能会在项目中看到许多与POM相关的错误。具体作是:spring-doc.cadn.net.cn

  1. 打开你的Eclipse偏好设置。spring-doc.cadn.net.cn

  2. 扩展Maven偏好spring-doc.cadn.net.cn

  3. 选择用户设置spring-doc.cadn.net.cn

  4. 用户设置字段中,点击浏览,然后导航到你导入的 Spring Cloud 项目。spring-doc.cadn.net.cn

  5. 选择.settings.xml在那个项目里。spring-doc.cadn.net.cn

  6. 点击应用spring-doc.cadn.net.cn

  7. 点击确定spring-doc.cadn.net.cn

或者,你也可以从Spring Cloud复制仓库设置.settings.xml归入你自己的~/.m2/settings.xml.

C.2.2. 导入Eclipse时不使用m2eclipse

如果你不喜欢使用 m2eclipse,可以通过以下命令生成 Eclipse 项目元数据:spring-doc.cadn.net.cn

$ ./mvnw eclipse:eclipse

你可以通过在文件菜单中选择“导入现有项目”来导入生成的 Eclipse 项目。spring-doc.cadn.net.cn