附录
在使用 Spring Cloud Data Flow 时遇到困难,我们想帮忙!
-
问个问题。我们会监控 stackoverflow.com 是否有问题 标签
Spring-cloud-dataflow. -
在 github.com/spring-cloud/spring-cloud-dataflow/issues 上报告Spring Cloud Data Flow的错误。
附录A:数据流模板
正如API指南章节所述,Spring Cloud数据流的功能完全通过REST端点开放。 虽然你可以直接使用这些端点,但Spring Cloud Data Flow还提供了一个基于Java的API,使使用这些REST端点更加简单。
中央入口点为DataFlowTemplate在org.springframework.cloud.dataflow.rest.client包。
该类实现了数据流作接口并委派到以下子模板,这些子模板为每个功能集提供具体功能:
| 接口 | 描述 |
|---|---|
|
流作的 REST 客户端 |
|
计数器作的 REST 客户端 |
|
字段值计数作的 REST 客户端 |
|
用于聚合计数作的REST客户端 |
|
任务作的 REST 客户端 |
|
作业作的 REST 客户端 |
|
用于应用注册表作的 REST 客户端 |
|
完备作的 REST 客户端 |
|
运行时作的 REST 客户端 |
当DataFlowTemplate正在初始化时,子模板可以通过HATEOAS(Hypermedia as the Engine of Application State)提供的REST关系来发现。
| 如果某个资源无法解析,相应的子模板会得到结果 在NULL中。一个常见原因是Spring Cloud Data Flow允许特定的 启动时需启用或禁用的功能集合。更多信息请参阅本地、Cloud Foundry 或 Kubernetes 配置章节,具体取决于你部署应用的地点。 |
A.1. 使用数据流模板
使用数据流模板时,唯一需要的数据流依赖是 Spring Cloud 数据流 Rest 客户端,如以下 Maven 摘要所示:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dataflow-rest-client</artifactId>
<version>2.6.4</version>
</dependency>
有了这种依赖,你会得到DataFlowTemplate以及调用 Spring Cloud Data Flow 服务器所需的所有依赖。
当实例化DataFlowTemplate,你也通过了Rest模板.
注意,所需的Rest模板需要某些额外的配置才能在DataFlowTemplate.
当声明Rest模板作为豆子,以下配置即可满足:
@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代码如下:
DataFlowTemplate dataFlowTemplate = new DataFlowTemplate(
new URI("http://localhost:9393/"), restTemplate); (1)
| 1 | 这URI指向你 Spring Cloud 数据流服务器的根节点。 |
根据你的需求,你现在可以拨打电话给服务器。例如 如果你想获取当前可用应用的列表,可以运行以下代码:
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所有的行动。
为了让你开始,我们提供了HttpClientConfigurer使用建构商
模式以设置各种安全相关选项:
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模板.
要配置基础认证,需要进行以下设置:
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上。
附录B:“作指南”
本节为常见问题解答了“我该如何做到......这些问题在使用 Spring Cloud Data Flow 时经常会出现。
如果你有我们这里未涵盖的具体问题,建议查看 stackoverflow.com 是否有人已经给出了答案。
那里也是提问新问题的好地方(使用以下内容)Spring-cloud-dataflow标签)。
我们也非常乐意延长这一部分。如果你想添加“作指南”,可以向我们发送拉取请求。
B.1. 配置Maven属性
你可以在启动数据流服务器时通过命令行属性设置 Maven 属性,如本地 Maven 仓库位置、远程 Maven 仓库、认证凭证和代理服务器属性。
或者,你可以通过设置SPRING_APPLICATION_JSON数据流服务器的环境属性。
如果应用程序通过 Maven 仓库解析,则需要显式配置远程 Maven 仓库,除非当地数据流服务器。其他数据流服务器实现(使用Maven资源进行应用工件解析)没有远程仓库的默认值。 这当地服务器有repo.spring.io/libs-snapshot作为默认的远程仓库。
要将属性作为命令行选项传递,运行服务器时,命令类似于以下内容:
$ 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环境特性:
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_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.3. 常见问题解答
在本节中,我们将回顾春季云数据流的常见问题解答。更多信息请参见微型网站的常见问题解答部分。
附录C:架构
本附录描述了如何构建 Spring Cloud 数据流。
要构建源代码,你需要安装JDK 1.8。
该构建使用Maven包装,这样你就不需要安装特定版本的Maven。
主要构建命令如下:
$ ./mvnw clean install
为了加快构建速度,你可以添加-Dskip测试为了避免做测试。
你也可以自己安装 Maven (>=3.3.3) 并运行MVN指挥 代替./mvnw下面的例子。如果你这样做,你可能还需要添加-PSpring如果你的本地 Maven 设置没有包含 Spring 预发布工件的仓库声明。 |
你可能需要通过设置 a 来增加 Maven 可用的内存容量MAVEN_OPTS环境变量的值类似于-Xmx512m -XX:MaxPermSize=128m. 我们试图在.mvn配置,如果你发现必须这样做才能让构建成功,请提交工单,把设置添加到源码控制中。 |
C.1. 文档
有一个满生成文档的配置文件。您可以使用以下命令仅构建文档:
$ ./mvnw clean package -DskipTests -P full -pl {project-artifactId} -am
C.2. 与规范合作
如果你没有喜欢的 IDE,我们建议你在处理代码时使用 Spring Tools Suite 或 Eclipse。我们使用 m2eclipse Eclipse 插件支持 Maven。其他 IDE 和工具通常也能正常工作。
C.2.1. 用m2eclipse导入Eclipse
我们推荐使用 M2eclipe Eclipse 插件。如果您还没有安装 m2eclipse,可以在 Eclipse 市场购买。
遗憾的是,m2e 目前还不支持 Maven 3.3。因此,一旦项目导入到 Eclipse,你还需要告诉 m2eclipse 使用.settings.xml为项目提交文件。如果不这样做,你可能会在项目中看到许多与POM相关的错误。具体作是:
-
打开你的Eclipse偏好设置。
-
扩展Maven偏好。
-
选择用户设置。
-
在用户设置字段中,点击浏览,然后导航到你导入的 Spring Cloud 项目。
-
选择
.settings.xml在那个项目里。 -
点击应用。
-
点击确定。
或者,你也可以从Spring Cloud复制仓库设置.settings.xml归入你自己的~/.m2/settings.xml. |
C.2.2. 导入Eclipse时不使用m2eclipse
如果你不喜欢使用 m2eclipse,可以通过以下命令生成 Eclipse 项目元数据:
$ ./mvnw eclipse:eclipse
你可以通过在文件菜单中选择“导入现有项目”来导入生成的 Eclipse 项目。