附录
遇到 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
接口 | 描述 |
---|---|
|
用于流操作的 REST 客户端 |
|
用于计数器操作的 REST 客户端 |
|
用于字段值计数器操作的 REST 客户端 |
|
用于聚合计数器操作的 REST 客户端 |
|
用于任务操作的 REST 客户端 |
|
用于作业操作的 REST 客户端 |
|
用于应用程序注册表操作的 REST 客户端 |
|
用于完成操作的 REST 客户端 |
|
用于运行时操作的 REST 客户端 |
初始化时,可以通过 REST 关系发现子模板,这些关系由 HATEOAS(超媒体作为应用程序状态的引擎)提供。DataFlowTemplate
如果无法解析资源,则会产生相应的子模板 在 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>
通过该依赖项,您可以获得类以及调用 Spring Cloud Data Flow 服务器所需的所有依赖项。DataFlowTemplate
实例化 时,您还会传入一个 .
请注意,所需的需要一些额外的配置才能在 .
当将 a 声明为 bean 时,以下配置就足够了:DataFlowTemplate
RestTemplate
RestTemplate
DataFlowTemplate
RestTemplate
@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 | 指向 Spring Cloud Data Flow Server 的 ROOT。URI |
根据您的要求,您现在可以调用服务器。例如 如果要获取当前可用应用程序的列表,可以运行以下代码:
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 其所有操作。DataFlowTemplate
DataFlowTemplate
为了让您开始使用,我们提供了一个使用 builder
pattern 设置各种与安全性相关的选项: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 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 存储库、身份验证凭据和代理服务器属性。
或者,可以通过设置数据流服务器的 environment 属性来设置属性。SPRING_APPLICATION_JSON
如果使用 Maven 存储库解析应用程序,则需要显式配置远程 Maven 存储库,但数据流服务器除外。
其他数据流服务器实现(使用 Maven 资源进行应用程序构件解析)没有远程存储库的默认值。
服务器已作为默认远程存储库。local
local
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
您还可以使用 environment 属性: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.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) 并运行命令来代替以下示例中的命令。
如果这样做,则如果本地 Maven 设置不包含 Spring 预发布工件的存储库声明,则可能还需要添加。mvn ./mvnw -P spring |
您可能需要通过设置值类似于 的环境变量来增加 Maven 可用的内存量。
我们尝试在配置中涵盖这一点,因此,如果您发现必须这样做才能使构建成功,请提交一个票证以将设置添加到源代码控制中。MAVEN_OPTS -Xmx512m -XX:MaxPermSize=128m .mvn |
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 将该文件用于项目。
如果不这样做,您可能会看到许多与项目中的 POM 相关的不同错误。
为此,请执行以下操作:.settings.xml
-
打开 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 项目。