这是我想要实现的目标:
- 一个批处理作业服务器,它为我的应用程序的作业提供统一的入口点,并为作业运行提供一个集中的位置,它构建在 Spring Batch 之上
- 不同的应用程序可以创建其作业包并在批处理作业服务器下“部署”。 “ bundle ”将包含作业定义、依赖 JAR 等。
- 应用程序作业包应该是独立的:2个作业包可以具有同一类的不同版本(即最好为不同的作业包提供单独的类加载器),这样开发人员就很少需要担心其他应用程序的作业。里>
- 不需要热部署。我可以接受停止我的批处理作业服务器应用程序,部署新包,进行一些配置,然后再次启动服务器。
简而言之,它就像 Spring Batch 作业的插件系统。
到目前为止,我使用 Spring Batch 的方式是构建一个应用程序,其中作业定义是应用程序的一部分(要么是应用程序源的一部分,要么作为依赖项)。然而,当我尝试让一台批处理服务器为多个应用程序提供服务时,我遇到了一些问题,例如,当应用程序 1 需要对其作业进行微小更改时,我将需要释放整个服务器(其中包括其他应用程序的作业)。我想看看是否:
- Spring Batch 等有现有的解决方案吗?
- 如果没有现成的解决方案,而我需要发明轮子,我应该考虑哪些技术?
ServiceLoader
来自 java ?操作系统Gi?
最佳答案
听起来您正在寻找的是 Spring XD ( http://projects.spring.io/spring-xd/ )。要逐点浏览您的项目:
- 批处理作业服务器,它为我的应用程序的作业提供统一的入口点,并为作业运行提供集中位置,它构建在 Spring Batch 之上 - Spring XD 是一个分布式运行时,是基于 Spring Batch 和 Spring Integration 构建的。它提供了一个用于管理作业部署、部署作业、启 Action 业、浏览作业存储库等的中心位置。您可以通过交互式 shell、Web UI 或前面两个选项使用的 REST API 进行交互。
- 不同的应用程序可以创建其作业包并在批处理作业服务器下“部署”。 “ bundle ”将包含作业定义、依赖 JAR 等。 - Spring XD 使用 Spring Boot 作为打包机制。使用特殊的插件(maven 和 gradle 都受支持),您可以将作业打包到一个 fat jar 中,就像将其作为包含作业定义及其所需依赖项的可执行 Spring Boot jar 来执行一样。虽然目前的结构是每个工件一项作业(因此每个 Spring Boot jar 一项作业),但 Spring XD 团队正在努力能够在更大的分组中移动多个模块(在您的情况下为作业)。
- 应用程序作业包应该是独立的:2个作业包可以有相同类的不同版本(即最好为不同的作业包提供单独的类加载器),这样开发人员就很少需要担心其他作业包的作业应用程序。 - 所有这些都在 Spring XD 中得到支持。每个模块都有自己的类加载器,并且可以指定自己的独立依赖项。
- 不需要热部署。我可以接受停止我的批处理作业服务器应用程序,部署新包,进行一些配置,然后再次启动服务器。 Spring XD 支持热部署。
我强烈建议您看看 Spring XD 来寻找您想要的东西。听起来正是您想要的。
关于java - 模块化工作定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30207665/