Spring batch Spring批处理体系结构

Spring batch Spring批处理体系结构,spring-batch,Spring Batch,嗨 我是Spring Batch world的新手,最近几天我花时间观看了Michael Minella的youtube视频,阅读了一些文档,并成功地运行了一些在互联网上找到的演示项目。我认为春季批是我们需求的热门候选产品。但这是我们的故事 十多年前,我在一家为其业务部门开发自己的调度和批处理框架的公司工作。该框架能够运行DB存储过程、DB函数和动态SQL。不用说,维护它是非常具有挑战性的,因为有太多具有各种开发技能的人进行了编码,他们不再在这里工作了。我们的框架可以处理作业和步骤,以便按顺序和

我是Spring Batch world的新手,最近几天我花时间观看了Michael Minella的youtube视频,阅读了一些文档,并成功地运行了一些在互联网上找到的演示项目。我认为春季批是我们需求的热门候选产品。但这是我们的故事

十多年前,我在一家为其业务部门开发自己的调度和批处理框架的公司工作。该框架能够运行DB存储过程、DB函数和动态SQL。不用说,维护它是非常具有挑战性的,因为有太多具有各种开发技能的人进行了编码,他们不再在这里工作了。我们的框架可以处理作业和步骤,以便按顺序和异步(如SpringBatch)运行。我们还有一个作业存储库,其中存储整个作业定义(用户通过GUI创建新作业)、作业实例及其上下文(如果服务器停机,当服务器启动时,它将恢复运行作业)。 我的问题如下:

  • 我们可以动态创建新的Spring批处理作业(通过XMLOG代码)并通过标准SB接口将它们存储到JobRepository数据库中吗

  • 今天,在某个时间段,我们同时执行了多达数百个工作。他们也在重用数据库的连接池。states JobFactory将为每个作业执行创建新的ApplicationContext。如果SpringBatch中是这种情况,我们如何实现连接池的重用

  • 我知道支持继续执行失败的步骤,但如果服务器/应用程序宕机,我是否能够重新启动应用程序并从JobRepository中检索作业实例及其上下文,以便从失败的步骤继续

  • “作业1”中的“步骤1.1”能否依赖于“作业2”中的“步骤2.1”在最后一小时内完成?在这种情况下,我可能会使用“step1.1”上的步骤侦听器来完成这项任务


  • 问候

    托托

    我们可以动态创建新的Spring批处理作业(通过XMLOG代码)并通过标准SB接口将它们存储到JobRepository数据库中吗

    很容易使用
    StepBuilderFactory
    FlowBuilder
    等以编程方式构建Spring批处理工件。您可能希望使用Springbean支持这些工件(以获得良好的功能,如step/job Spring作用域、注入等),为此,您可以使用原型、执行作用域和作业作用域bean,甚至使用
    BeanDefinitionBuilder
    等功能来动态创建bean

    旧的Spring批处理引用文档说明JobFactory将为每个作业执行创建新的ApplicationContext。如果SpringBatch中是这种情况,我们如何实现连接池的重用

    GenericaApplicationContextFactory
    创建子应用程序上下文。您可以在父应用程序上下文中拥有“全局”bean

    我知道支持继续执行失败的步骤,但如果服务器/应用程序宕机,我是否能够重新启动应用程序并从JobRepository中检索作业实例及其上下文,以便从失败的步骤继续

    是的,但是

    “作业1”中的“步骤1.1”能否依赖于“作业2”中的“步骤2.1”在最后一小时内完成?在这种情况下,我可能会使用“step1.1”上的步骤侦听器来完成这项任务


    作业执行决策者可能是最好的选择。

    这里有很多材料要介绍,所以让我一次回答一点:

    我们可以动态创建新的Spring批处理作业(通过XML或代码)并通过标准SB接口将它们存储到JobRepository DB吗?

    能否动态生成作业定义?对我们在SpringXD中对作业编排块(例如,组合作业DSL用于生成XML文件)进行了处理

    SpringBatch是否提供了执行此操作的工具?没有。您必须自己编写代码

    还请注意,您必须将定义存储在自己的表中(SpringBatch定义的模式没有用于此定义的表)

    今天,在特定的时间段内,我们同时有多达数百个作业执行。它们也在重用数据库的连接池。较旧的Spring Batch ref文档说明JobFactory将为每个作业执行创建新的应用程序上下文。如果Spring Batch中出现这种情况,我们如何实现重用连接池。

    您可以使用父/子上下文配置重用bean,包括
    数据源
    。在父上下文中定义
    数据源
    ,然后在子上下文中定义依赖它的作业

    我知道支持继续执行失败的步骤,但如果服务器/应用程序出现故障,我是否能够重新启动应用程序并从JobRepository中检索作业实例及其上下文,以便从失败的步骤继续执行?

    这确实是一个编排问题。Spring Batch在设计上没有考虑作业的编排。这允许您按照自己的方式编排作业

    我推荐的处理方式是通过或(取决于您的时间表)。这些工具提供编排功能,包括在作业停止时重新部署作业。也就是说,如果作业失败,它不会重新启动正在运行的作业,因为这通常需要基于用例的某种形式的人工决策。但是,Spring XD当前(以及Spring Cloud Data Flow将)有能力以非常直接的方式实现类似的东西

    在“作业1”中的“步骤1.1”能否依赖于“作业2”中的“步骤2.1”在最后一小时内完成?在这种情况下,我可能会使用“步骤1.1”中的步骤侦听器来完成此任务?

    在这种情况下,我开始质疑您的作业是如何配置的。您可以使用
    JobExecutionDecider
    来决定步骤是否正确