gpt4 book ai didi

spring-batch - Spring Batch 架构

转载 作者:行者123 更新时间:2023-12-04 04:18:54 27 4
gpt4 key购买 nike

你好
我是 Spring Batch 领域的新手,最近几天我花了一些时间观看 Michael Minella 的 youtube 视频,阅读了一些文档并成功运行了我在互联网上找到的一些演示项目。我认为 Spring Batch 是满足我们需求的热门人选。但这是我们的故事。
我在一家公司工作,该公司十多年前为他们的业务部门开发了自己的调度和批处理框架。该框架能够运行 DB 存储过程、DB 函数和动态 SQL。不用说,维护它非常具有挑战性,因为太多具有各种开发技能的人进行了编码,他们不再在这里工作。我们的框架可以处理作业和步骤以顺序运行以及异步(如 Spring Batch)。我们还有一个作业存储库,我们存储整个作业定义(用户通过 GUI 创建新作业)、作业实例及其上下文(以防服务器宕机,当服务器启动时,它将恢复运行作业)。
我的问题如下:

  • 我们能否动态创建新的 Spring Batch 作业(通过 XML og 代码)并通过标准 SB 接口(interface)将它们存储到 JobRepository DB?
  • 今天,在某个时间段,我们同时执行了多达数百个作业。他们还重用了数据库的连接池。 Older Spring Batch ref documentation状态 JobFactory 将为每个作业执行创建新的 ApplicationContext。如果在 Spring Batch 中是这种情况,我们如何实现重用连接池。
  • 我知道支持继续失败的步骤,但是如果服务器/应用程序出现故障,我是否能够重新启动我的应用程序并从 JobRepository 检索作业实例及其上下文,以便从失败的步骤继续?
  • “job1”中的“step1.1”能否依赖于“job2”中的“step2.1”在最后一小时内完成?在这种情况下,我可能会在“step1.1”上使用步骤监听器来完成此操作?


  • 亲切的问候
    托托

    最佳答案

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

    我们能否动态地创建新的 Spring Batch 作业(通过 XML 或代码)并通过标准 SB 接口(interface)将它们存储到 JobRepository DB?

    您可以动态生成作业定义吗?是的。我们在 Spring XD 中针对作业编排部分执行此操作(例如,组合作业 DSL 用于生成 XML 文件。

    Spring Batch 是否提供了执行此操作的设施?不,您必须自己编写代码。

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

    今天,在某个时间段,我们同时执行了多达数百个作业。他们还重用了数据库的连接池。较早的 Spring Batch 引用文档指出 JobFactory 将为每个作业执行创建新的 ApplicationContext。如果在 Spring Batch 中是这种情况,我们如何实现重用连接池。

    您可以使用父/子上下文配置来重用 bean,包括 DataSource .定义 DataSource在父级中,然后在子级上下文中依赖于它的工作。

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

    这确实是一个编排问题。 Spring Batch 在设计上并未考虑到作业的编排。这使您可以按照自己的意愿编排它们。

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

    “job1”中的“step1.1”能否依赖于“job2”中的“step2.1”在最后一小时内完成?在这种情况下,我可能会在“step1.1”上使用步骤监听器来完成此操作?

    在这种情况下,我会开始质疑您的工作是如何配置的。您可以使用 JobExecutionDecider决定是否应该执行一个步骤,如果它仍然有意义。

    考虑到所有因素,虽然您可以使用 Spring Batch 完成大部分您正在寻找的事情,但使用 Spring XD 或 Spring Cloud Data Flow 之类的东西会让您的生活更轻松。

    关于spring-batch - Spring Batch 架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35476153/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com