模块化作业定义

时间:2015-05-13 06:53:53

标签: java spring-batch spring-xd

这是我想要实现的目标:

  1. 批处理作业服务器,它为我的应用程序的作业提供统一的入口点,并为作业运行提供集中的位置,这是建立在Spring Batch之上的。
  2. 不同的应用程序可以创建他们的工作包和"部署"在批处理作业服务器下。 "捆绑"将包含作业定义,依赖JAR等。
  3. 应用程序作业包应该是自包含的:2个作业包可以具有相同类的不同版本(即,对于不同的包具有更好的单独的类加载器),因此开发人员很少需要担心其他应用程序的作业。 / LI>
  4. 不需要热部署。我可以接受停止我的批处理作业服务器应用程序,部署新的bundle,进行一些配置,然后重新启动服务器。
  5. 简而言之,它就像是Spring Batch作业的插件系统。

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

    1. Spring Batch等有没有现成的解决方案?
    2. 如果没有现有的解决方案而我需要发明轮子,我应该看一下哪些技术?来自Java的ServiceLoader? OSGi的?

1 个答案:

答案 0 :(得分:2)

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

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