通过单独运行批处理微服务在 Spring Cloud Data Flow 上部署 Spring Batch 应用程序
Posted
技术标签:
【中文标题】通过单独运行批处理微服务在 Spring Cloud Data Flow 上部署 Spring Batch 应用程序【英文标题】:Deploy Spring Batch application on Spring Cloud Data Flow by running the batch microservice separately 【发布时间】:2019-10-02 12:13:37 【问题描述】:我有一个 Spring 批处理应用程序,我希望有两个选项来触发批处理:
-
公开一个 REST api
调度器
通过将批处理应用程序打包为任务,我可以将应用程序部署在单独运行的 SCDF 服务器上。我正在 SCDF 服务器上创建任务类型的应用程序并引用批处理应用程序的 jar 文件。然后使用应用程序任务创建一个任务。
我知道 SCDF 会公开 REST 接口以按计划和一次性触发任务,但是我想将触发器保留在批处理本身中,因为我们需要使用单独的定义公开 REST 接口。
是否可以将 Spring 批处理应用程序作为 Spring Boot 微服务单独运行并注册为 SCDF 服务器的任务?
【问题讨论】:
【参考方案1】:是否可以将 Spring 批处理应用程序作为 Spring Boot 微服务单独运行并注册为 SCDF 服务器的任务?
不,SCDF 中的任务定义需要让您利用 SCDF 的 RESTful 端点来启动或安排它以进行重复运行。 SCDF 中没有自动发现独立运行的任意批处理作业的机制。除非从 SCDF 中建立足迹,否则我们没有任何跟踪能力来管理独立应用程序。
另一个需要注意的重要区别是:任务。 SCDF 中的任务是短暂的。它们启动、执行业务操作,并在业务逻辑完成时关闭。
为了让这个核心设计在 Kubernetes 和 Cloud Foundry 等云平台中运行,我们不期望任务/批处理应用程序与 RESTful 控制器捆绑在一起。同样,任务也没有可用的健康检查。在你添加 RESTful 特性的那一刻,它就需要作为一个长时间运行的应用程序运行(因为你希望端点可以从其他服务访问),这将违反云平台中任务的设计前提。
【讨论】:
以上是关于通过单独运行批处理微服务在 Spring Cloud Data Flow 上部署 Spring Batch 应用程序的主要内容,如果未能解决你的问题,请参考以下文章