Spring batch Spring批处理体系结构
嗨 我是Spring Batch world的新手,最近几天我花时间观看了Michael Minella的youtube视频,阅读了一些文档,并成功地运行了一些在互联网上找到的演示项目。我认为春季批是我们需求的热门候选产品。但这是我们的故事 十多年前,我在一家为其业务部门开发自己的调度和批处理框架的公司工作。该框架能够运行DB存储过程、DB函数和动态SQL。不用说,维护它是非常具有挑战性的,因为有太多具有各种开发技能的人进行了编码,他们不再在这里工作了。我们的框架可以处理作业和步骤,以便按顺序和异步(如SpringBatch)运行。我们还有一个作业存储库,其中存储整个作业定义(用户通过GUI创建新作业)、作业实例及其上下文(如果服务器停机,当服务器启动时,它将恢复运行作业)。 我的问题如下:Spring batch Spring批处理体系结构,spring-batch,Spring Batch,嗨 我是Spring Batch world的新手,最近几天我花时间观看了Michael Minella的youtube视频,阅读了一些文档,并成功地运行了一些在互联网上找到的演示项目。我认为春季批是我们需求的热门候选产品。但这是我们的故事 十多年前,我在一家为其业务部门开发自己的调度和批处理框架的公司工作。该框架能够运行DB存储过程、DB函数和动态SQL。不用说,维护它是非常具有挑战性的,因为有太多具有各种开发技能的人进行了编码,他们不再在这里工作了。我们的框架可以处理作业和步骤,以便按顺序和
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
来决定步骤是否正确