如何开始使用 Spring Batch? [关闭]

Posted

技术标签:

【中文标题】如何开始使用 Spring Batch? [关闭]【英文标题】:How can I get started with Spring Batch? [closed] 【发布时间】:2010-12-09 05:59:12 【问题描述】:

我正在努力学习Spring Batch,但startup guide 非常令人困惑。像

这样的评论

你可以很好地了解 如何通过检查来设置工作 单元测试在 org.springframework.batch.sample 包(在 src/main/java 中)和 配置在 src/main/resources/jobs.

并不完全有帮助。 我还发现示例项目非常复杂(17 个非空命名空间和 109 个类)!有没有更简单的地方开始使用 Spring Batch?

【问题讨论】:

我必须同意。现在探索框架,样本对新手并不友好:) 我仍然同意这个问题的作者 【参考方案1】:

几点建议:

Spring Batch HelloWorld Spring Batch "Hello World" 1 Spring Batch "Hello World" 2 A first look at Spring Batch(来自archive.org) A first look at Spring Batch, part 2(来自archive.org) Spring Batch : Hello World!

【讨论】:

补充一点,如果有人正在寻找一种使用 Quartz(调度程序)启动 Spring Batch 的方法,请查看 src/main/resources 中的quartz-job-launcher-context.xml样本。 前3个链接好像过期了,最后2个链接出错了。而且似乎也没有任何有用的书...有什么建议吗? 只是为了澄清@James 评论...... 样本 是春季批量分发中的样本 是的,不要指望一夜之间就能搞定配置文件 :) 也许这个答案太老了。【参考方案2】:

在本教程中,我们将创建一个简单的 Spring Batch 应用程序来演示如何处理一系列作业,其中主要目的是导入逗号分隔和固定长度记录的列表。此外,我们将添加一个使用 Spring MVC 的 Web 界面来教授如何手动触发作业,以便我们可以直观地检查导入的记录。在数据层,我们将使用 JPA、Hibernate 和 mysql

    http://krams915.blogspot.jp/2012/02/spring-batch-tutorial-part-1.html http://krams915.blogspot.jp/2012/02/spring-batch-tutorial-part-2.html http://krams915.blogspot.jp/2012/02/spring-batch-tutorial-part-3.html http://krams915.blogspot.jp/2012/02/spring-batch-tutorial-part-4.html

【讨论】:

本教程涵盖 Spring Batch 2!所以你可以用这个代替过时的 Spring Batch 1 教程。【参考方案3】:

https://github.com/langmi/spring-batch-examples

这包含一些非常好的基本示例。

【讨论】:

【参考方案4】:

我最近尝试了 Spring Batch。我会说,在我的实现中,我使用了一个内存存储库(因为在我的项目情况下重新启动和重试不是优先事项),但我可以理解 Richard 关于 JobRepository 所说的话:你基本上必须深入挖掘才能找到数据库架构。

对于 Spring Batch 2.1,他们确实提供了一些关于存储库的文档:http://static.springsource.org/spring-batch/reference/html/metaDataSchema.html,包括有关如何处理特定于数据库的实现的讨论。用于创建表的 DDL 位于核心 Spring Batch JAR 文件中:

spring-batch-core-2.1.0.RELEASE.jar:/org/springframework/batch/core/*.sql

脚本适用于 DB2、Derby、H2、HSQLDB、MySQL、Oracle 10g、PostgreSQL、MS SQL 和 Sybase。

【讨论】:

关于 Spring Batch 的另一个观察:我可以理解人们对 API 的看法:乍一看,它确实显得笨拙。但是它在处理平面 ASCII 文件时提供了足够的好处(你会惊讶于有多少遗留数据处理仍然使用固定宽度的平面文件——哎呀,只是仍在使用的 COBOL 数量有时让我头疼)我决定试一试。我最后的想法是 Job 和 Step 执行上下文的概念是我在开发中一次又一次地绊倒的原因。 您可以将该评论编辑到您的问题中。不过你说的有道理。我也必须处理 COBOL 生成的 ASCII 文件,所以也许我会再看一下。不过,我仍然有一种模糊的感觉,那就是矫枉过正。 是的,这是我第一次回答(和评论)SO,所以我不清楚编辑的机制(就像现在一样)。 感谢@WineSoaked 为我省去了挖掘 DDL 脚本的麻烦:D【参考方案5】:

可惜你们放弃了它,这个框架实际上真的很棒。但如果其他人需要快速入门,请尝试:Spring Batch Quick Start

/阿纳托利

【讨论】:

【参考方案6】:

我刚刚开始将 Spring Batch 视为我们内部批处理框架的可能替代品。实际上,创建具有调度作业能力的批处理服务器和顶部的 JMX 接口以提供正在运行/以前运行的作业实例的概述只花了一天多一点的时间。 但是,像 Caoilte 一样,我发现文档存在问题。主要的,一个不在文档或 javadocs 中的,是 JobRepository 所需的表。默认设置是拥有数据库持久性 JobRepository,这是我的新服务器的要求之一,但我找不到所需的表的任何提及。我不得不在谷歌上下搜索任何提及它们(如果它们在文档中,那么我很乐意在我不起眼的馅饼上撒盐)。

我认为实际上创建批处理以在 Spring Batch 中运行是一项相当复杂的任务,因为您可以使用大量的配置选项。这是我眼中的一种力量。它提供了在 xml 中配置复杂批处理任务的机会,这是我在任何其他批处理框架(我知道的)中还没有找到的。但是,如果您真的不想利用 Spring Batch 的强大功能,为什么不使用单个 tasklet 步骤创建一个作业(但是您必须问自己是否值得开销)。

【讨论】:

由于文档有限,我放弃了该框架,而且说实话,它远远超出了我们的需要。祝你好运。 在他们准备发布 2.0 时再次查看它。【参考方案7】:

我同意用户指南非常混乱(无论如何与 Spring Core 用户指南相比)。它没有充分解决您在任何中等复杂的批处理场景中都会遇到的一些非常重要的问题。

作为新手,您应该深入了解的重要事项,并确定您的要求是,

异常配置(何时跳过、何时失败、何时重试) 使用执行上下文来维护状态(例如,何时使用步骤执行上下文与作业执行上下文)。 状态的一般维护(使用 step 范围,尤其是输入参数)

但值得坚持。批处理编程与其他服务器端样式非常不同,并且极大地受益于通常的 Spring“模式抽象”方法。

【讨论】:

【参考方案8】:

在您跳上 Spring Batch 之前,您可能想阅读 SO 自己的 cletus 对其缺点的评价:

http://www.cforcoding.com/2009/07/spring-batch-or-how-not-to-design-api.html.

我最近评估了 Spring Batch,但当我意识到它除了膨胀和开销之外,它对我的​​项目没有任何好处时,我很快就拒绝了它。 Spring Batch 可能最终会成为一个不错的产品(就像 EJB 这次做对了一样),但目前它看起来像是一个寻找问题的解决方案。

【讨论】:

我已经读过了。它似乎对我正在尝试做的事情很有用(并且出于架构原因,我无论如何都必须使用 Spring)。但是我担心复杂性(非常复杂的配置文件)。简而言之,我自己还在评估它,这就是我问这个问题的原因。 @C. Ross - 完全可以将 Spring 与 Quartz 结合使用(用于调度)并完全避免 Spring Batch。您可以使用策略模式来概括作业和步骤,并且可以通过在数据上存储事务状态轻松滚动自己的持久性。这就是我们最终做的事情,而且效果很好。我只是没有看到 Spring Batch 提供任何有价值的东西来弥补它的头痛。 批处理系统不仅仅是步骤和作业。如果这就是您所需要的,那很好,但如果您需要其他功能,例如重复和重试功能、并行处理等,那么 Spring Batch 可能是一个很好的解决方案。

以上是关于如何开始使用 Spring Batch? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何获取具有已完成状态的 Spring Batch 作业的最后执行的开始或结束日期?

关于这个 Spring Batch @Scheduled() 注解以及如何手动启动 Spring Batch 作业的一些疑问?

在获取所有数据之前,Spring Batch ResultSet 已被其他人关闭

Spring-batch:如何在 Spring Batch 中使用 skip 方法捕获异常消息?

使用 Spring Integration JAR 时 Spring Batch 未退出

Spring Batch 中 Scheduler 定时任务