java - 模块化工作定义

标签 java spring-batch spring-xd

这是我想要实现的目标:

  1. 一个批处理作业服务器,它为我的应用程序的作业提供统一的入口点,并为作业运行提供一个集中的位置,它构建在 Spring Batch 之上
  2. 不同的应用程序可以创建其作业包并在批处理作业服务器下“部署”。 “ bundle ”将包含作业定义、依赖 JAR 等。
  3. 应用程序作业包应该是独立的:2个作业包可以具有同一类的不同版本(即最好为不同的作业包提供单独的类加载器),这样开发人员就很少需要担心其他应用程序的作业。
  4. 不需要热部署。我可以接受停止我的批处理作业服务器应用程序,部署新包,进行一些配置,然后再次启动服务器。

简而言之,它就像 Spring Batch 作业的插件系统。

到目前为止,我使用 Spring Batch 的方式是构建一个应用程序,其中作业定义是应用程序的一部分(要么是应用程序源的一部分,要么作为依赖项)。然而,当我尝试让一台批处理服务器为多个应用程序提供服务时,我遇到了一些问题,例如,当应用程序 1 需要对其作业进行微小更改时,我将需要释放整个服务器(其中包括其他应用程序的作业)。我想看看是否:

  1. Spring Batch 等有现有的解决方案吗?
  2. 如果没有现成的解决方案,而我需要发明轮子,我应该考虑哪些技术? ServiceLoader来自 java ?操作系统Gi?

最佳答案

听起来您正在寻找的是 Spring XD ( http://projects.spring.io/spring-xd/ )。要逐点浏览您的项目:

  1. 批处理作业服务器,它为我的应用程序的作业提供统一的入口点,并为作业运行提供集中位置,它构建在 Spring Batch 之上 - Spring XD 是一个分布式运行时,是基于 Spring Batch 和 Spring Integration 构建的。它提供了一个用于管理作业部署、部署作业、启 Action 业、浏览作业存储库等的中心位置。您可以通过交互式 shell、Web UI 或前面两个选项使用的 REST API 进行交互。
  2. 不同的应用程序可以创建其作业包并在批处理作业服务器下“部署”。 “ bundle ”将包含作业定义、依赖 JAR 等。 - Spring XD 使用 Spring Boot 作为打包机制。使用特殊的插件(maven 和 gradle 都受支持),您可以将作业打包到一个 fat jar 中,就像将其作为包含作业定义及其所需依赖项的可执行 Spring Boot jar 来执行一样。虽然目前的结构是每个工件一项作业(因此每个 Spring Boot jar 一项作业),但 Spring XD 团队正在努力能够在更大的分组中移动多个模块(在您的情况下为作业)。
  3. 应用程序作业包应该是独立的:2个作业包可以有相同类的不同版本(即最好为不同的作业包提供单独的类加载器),这样开发人员就很少需要担心其他作业包的作业应用程序。 - 所有这些都在 Spring XD 中得到支持。每个模块都有自己的类加载器,并且可以指定自己的独立依赖项。
  4. 不需要热部署。我可以接受停止我的批处理作业服务器应用程序,部署新包,进行一些配置,然后再次启动服务器。 Spring XD 支持热部署。

我强烈建议您看看 Spring XD 来寻找您想要的东西。听起来正是您想要的。

关于java - 模块化工作定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30207665/

相关文章:

java - spring 中@Value 的插入顺序不明确

java - Spring Integration Kafka 适配器不产生消息

java - Google Chart JSON 问题 - Java

java - 如何识别一组消息何时已送达

java - StringIndexOutOfBoundsException 字符串索引超出范围 : 0

java - 在java中处理/读取.BAI2文件

java - Spring Batch - 从 Aws S3 读取文件

java - 当字符串未采用 UTF-8 编码时抛出异常

java - 具有不同种子的 Java Random 实例是否真的会产生不同的序列,或者它们是否从同一序列的不同位置开始?