Spring Batch 框架提供了一种简单、健壮且可靠的方式来编写批处理应用程序。批处理应用程序表征大量数据的处理,例如文件索引、金融交易、统计计算等。此类应用程序需要批量执行数据并适合常见的批处理模式。本文提供了 Spring Batch 框架及其在 Java 中的实现的高级概述。
概述
批处理与在处理时需要用户和其他干预的应用程序完全相反。事实上,它是一种无缝的数据处理,没有任何类型的交互或中断。从历史上看,批处理是对单指令处理的改进。简而言之,在批处理系统中,大量类似的数据被编译并提供给处理,几乎没有中断或干预。与可能遭受不可预测的资源利用率峰值的非批处理应用程序不同,批处理由于其可预测性而非常可预测且易于管理。乍一看,批处理系统似乎非常简单,并且不会对开发造成任何挑战。但是,事实恰恰相反。它有自己的一系列挑战,除非得到妥善处理,否则可能是一个真正的问题。
在典型的批处理应用程序中,一个系统将一堆事务作为文件导出,而另一个系统从文件中导入这些数据并将它们持久化到数据库中,如图 1 所示。
在企业环境中,会发生大量复杂的计算;它每天都使用尖端算法为庞大的文档库编制索引。批处理应用程序注意时间,并且很容易适应在实时环境中工作的要求。尽管还有其他方法,例如基于消息的解决方案,但它们并不相互排斥。他们有自己独特的挑战和用途。批处理应用程序的独特用途也不同;即使在当今复杂的企业环境中,它们也是其他解决方案无法比拟的。
批量挑战
简而言之,批处理应用程序面临的挑战是可维护性、可扩展性、可用性和安全性。
可维护性:如果批处理作业失败,必须知道失败的点和时间,以便快速调试。这利用了可维护性。
可扩展性:批处理必须是可扩展的。批处理作业批量在一段时间内可能从十个扩展到数千个的程度。应用程序必须能够在处理过程中没有明显滞后的情况下扩展操作的大小。
可用性:有趣的是,批处理作业并非始终完成,而是在某个时间安排。通常,企业批处理作业会堆积起来,以便在硬件、数据和其他资源可用的给定时间点进行处理。例如,在银行系统中,交易最终被安排在资源更多可用时记录。
安全性:最后,在利用数据安全性的意义上,批处理必须是安全的。这涉及数据验证、敏感数据加密、安全访问外部系统等。
Spring Batch 框架
编写批处理应用程序不是很简单; 除了简单地编译批量作业之外,还有许多问题必须在一开始就解决。这就是创建 Spring Batch 框架的原因。目标是提供一个开源的、面向批处理的框架,以解决在开发尖端批处理应用程序中出现的问题。Spring Batch 是 2007 年与 Accenture 和 Spring Source 合作完成的一个项目。
从非常高的层次来看,Spring Batch 可以被视为三层配置:应用程序、核心和基础架构。这些如图 2 所示。
三个层次如下:
应用程序:应用程序层编译开发人员编写的所有批处理作业和代码,例如业务逻辑、服务代码以及作业结构的配置。请注意,在实践中,应用程序不是一个独特的实体,而是核心和基础架构层的包装,因为在大多数情况下,开发包括自定义基础架构代码,例如读取器和写入器,以及核心类。
核心:核心包含用于控制和启动批处理作业的运行时类。它包括核心组件,例如 Job 和 Step 接口以及其他接口,例如 JobLauncher 和 JobParameters。
基础架构:基础架构包含开发人员所需的读取器、写入器和服务模板以及核心框架。它处理来自文件、数据库等的读、写、错误处理功能。
Spring Batch 的优势在于,人们也可以从 Spring 框架的最佳实践中获益。Spring Framework 包含许多流行技术的现成组件,例如 JDBC、Hibernate、JPA、XML、iBATIS 等。这利用了复杂的开发需求。
结论
本文简要介绍了批处理,它与当今企业需求的相关性,以及 Spring Batch 框架的高级概述。