附录
遇到 Spring Cloud Data Flow 问题,我们愿意提供帮助!
-
提出问题。我们监控 stackoverflow.com 的问题 标记
spring-cloud-dataflow
. -
在 github.com/spring-cloud/spring-cloud-dataflow/issues 报告 Spring Cloud Data Flow 的 bug。
附录 A:数据流模板
如 API 指南一章中所述,Spring Cloud Data Flow 的功能完全通过 REST 端点公开。 虽然您可以直接使用这些终端节点,但 Spring Cloud Data Flow 还提供了一个基于 Java 的 API,这使得使用这些 REST 终端节点变得更加容易。
中心入口点是DataFlowTemplate
类中org.springframework.cloud.dataflow.rest.client
包。
此类实现DataFlowOperations
interface 并委托给以下子模板,这些子模板为每个功能集提供特定功能:
接口 | 描述 |
---|---|
|
用于流作的 REST 客户端 |
|
用于计数器作的 REST 客户端 |
|
用于字段值计数器作的 REST 客户端 |
|
用于聚合计数器作的 REST 客户端 |
|
用于任务作的 REST 客户端 |
|
用于作业作的 REST 客户端 |
|
用于应用程序注册表作的 REST 客户端 |
|
用于完成作的 REST 客户端 |
|
用于运行时作的 REST 客户端 |
当DataFlowTemplate
正在初始化,子模板可以通过 REST 关系发现,这些关系由 HATEOAS(超媒体作为应用程序状态的引擎)提供。
如果无法解析资源,则会产生相应的子模板 在 NULL 中。一个常见的原因是 Spring Cloud Data Flow 允许特定的 启动时要启用或禁用的功能集。有关更多信息,请参阅本地、Cloud Foundry 或 Kubernetes 配置章节之一,具体取决于您部署应用程序的位置。 |
A.1. 使用数据流模板
当您使用数据流模板时,唯一需要的数据流依赖项是 Spring Cloud Data Flow Rest 客户端,如以下 Maven 代码片段所示:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dataflow-rest-client</artifactId>
<version>2.9.7-SNAPSHOT</version>
</dependency>
通过该依赖项,您可以获得DataFlowTemplate
类以及调用 Spring Cloud Data Flow 服务器所需的所有依赖项。
实例化DataFlowTemplate
,您还会传入一个RestTemplate
.
请注意,所需的RestTemplate
需要一些额外的配置才能在DataFlowTemplate
.
当声明RestTemplate
作为 bean,以下配置就足够了:
@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;
}
您还可以获取预配置的RestTemplate 通过使用DataFlowTemplate.getDefaultDataflowRestTemplate();
|
现在,您可以实例化DataFlowTemplate
使用以下代码:
DataFlowTemplate dataFlowTemplate = new DataFlowTemplate(
new URI("http://localhost:9393/"), restTemplate); (1)
1 | 这URI 指向 Spring Cloud Data Flow Server 的 ROOT。 |
根据您的要求,您现在可以调用服务器。例如 如果要获取当前可用应用程序的列表,可以运行以下代码:
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. 数据流模板和安全性
使用DataFlowTemplate
,您还可以提供所有与安全性相关的
选项,就像您使用的是数据流 Shell 一样。事实上,Data Flow Shell 使用DataFlowTemplate
用于其所有作。
为了让您开始使用,我们提供了一个HttpClientConfigurer
使用构建器
pattern 设置各种与安全性相关的选项:
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 | 构建ClientHttpRequestFactory 可以在RestTemplate . |
一旦HttpClientConfigurer
配置,您可以使用其buildClientHttpRequestFactory
构建ClientHttpRequestFactory
,然后设置相应的
属性RestTemplate
.然后,您可以实例化实际的DataFlowTemplate
使用RestTemplate
.
要配置基本身份验证,需要进行以下设置:
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:“作方法”指南
本节提供了一些常见的“我该怎么做......“的问题。
如果您有我们在此处未涵盖的特定问题,您可能需要查看 stackoverflow.com 以查看是否有人已经提供了答案。
这也是提出新问题的好地方(使用spring-cloud-dataflow
标签)。
我们也非常乐意扩展此部分。如果您想添加 “how-to”,可以向我们发送拉取请求。
B.1. 配置 Maven 属性
在启动数据流服务器时,可以通过命令行属性设置 Maven 属性,例如本地 Maven 存储库位置、远程 Maven 存储库、身份验证凭据和代理服务器属性。
或者,您可以通过设置SPRING_APPLICATION_JSON
environment 属性。
如果使用 Maven 存储库解析应用程序,则需要显式配置远程 Maven 存储库,但local
数据流服务器。
其他数据流服务器实现(使用 Maven 资源进行应用程序构件解析)没有远程存储库的默认值。
这local
server 具有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
environment 属性:
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.2. 故障排除
本节介绍如何在您选择的平台上对 Spring Cloud Data Flow 进行故障排除。请参阅微型网站的 Stream 和 Batch processing 的疑难解答部分。
B.3. 常见问题
在本节中,我们将回顾 Spring Cloud Data Flow 的常见问题。 有关更多信息,请参阅微型网站的“常见问题”部分。
附录 C:架构
本附录介绍如何构建 Spring Cloud Data Flow。
要构建源代码,您需要安装 JDK 1.8。
该版本使用 Maven 包装器,因此您不必安装特定版本的 Maven。
主要的 build 命令如下:
$ ./mvnw clean install
要加快构建速度,您可以添加-DskipTests
以避免运行测试。
您也可以自己安装 Maven (>=3.3.3) 并运行mvn command 代替./mvnw 在下面的示例中。
如果这样做,您可能还需要添加-P spring 如果您的本地 Maven 设置不包含 Spring 预发布工件的存储库声明。 |
您可能需要通过设置MAVEN_OPTS 环境变量,其值类似于-Xmx512m -XX:MaxPermSize=128m .
我们尝试在.mvn configuration,因此,如果您发现必须这样做才能使构建成功,请提交一个票证以将设置添加到源代码控制中。 |
C.1. 文档
有一个full
生成文档的配置文件。您只能使用以下命令构建文档:
$ ./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
在使用 Eclipse 时,我们建议使用 m2eclipe eclipse 插件。 如果您尚未安装 m2eclipse,可以从 Eclipse Marketplace 获取它。
遗憾的是,m2e 尚不支持 Maven 3.3。
因此,一旦项目被导入到 Eclipse 中,您还需要告诉 m2eclipse 使用.settings.xml
文件。
如果不这样做,您可能会看到许多与项目中的 POM 相关的不同错误。
为此,请执行以下作:
-
打开 Eclipse 首选项。
-
展开 Maven 首选项。
-
选择 User Settings (用户设置)。
-
在 User Settings 字段中,单击 Browse 并导航到您导入的 Spring Cloud 项目。
-
选择
.settings.xml
文件。 -
单击 Apply。
-
单击 OK。
或者,您可以从 Spring Cloud 的.settings.xml 文件复制到您自己的~/.m2/settings.xml . |
C.2.2. 在没有 m2eclipse 的情况下导入到 Eclipse 中
如果您不想使用 m2eclipse,则可以使用以下命令生成 Eclipse 项目元数据:
$ ./mvnw eclipse:eclipse
您可以通过从 File 菜单中选择 Import existing projects 来导入生成的 Eclipse 项目。