描述
官网说明: 一个轻量级,全面的批处理框架,旨在支持开发对企业系统的日常运行至关重要的强大的批处理应用程序。Spring Batch提供了可重用的功能,这些功能对于处理大量记录至关重要,包括日志记录/跟踪,事务管理,作业处理统计信息,作业重新启动,跳过和资源管理。它还提供了更高级的技术服务和功能,这些功能和功能将通过优化和分区技术来实现极高容量和高性能的批处理作业。无论简单还是复杂,大批量处理作业,都可以以高度可扩展的方式利用框架来处理大量信息。
当项目需要用到批处理来处理大量数据, 但不想引入过多的组件如Flink, Spark, Hadoop, Yarn等, 引入这些组件往往使系统变得很重, 相对来说那么Spring Batch很轻量; 入门一门新的框架, 我一般喜欢去看官网的介绍, 了解关键的组成和基础概念,再去GitHub下源码跑test, 通过test和注释去梳理和理解流程, 锻炼到自己的独立思考能力, 带着问题去驱动学习, 这种方法对其他的框架也同样适合.
步骤
1. 下载 解压
2. cmd进到源码目录执行 gradlew build -x test
JDK版本建议为1.8, 太高可能会导致某些模块无法通过编译(如makePDF)
编译过程中可能会失败, 结合--stacktrace, --warning-mode, --info等信息进行辅助排查, 通过--scan可以在一份在线的扫描报告, 输入邮箱地址就可以看到了; 编译的时候跳过测试类, 否则该阶段会非常漫长
3. 导入到IDEA中
问题记录
执行命令过程中出现
1. Task :makePDF FAILED
2. 堆栈报错: Cause by: org.gradle.api.GradleException : Error running Asciidoctor
makePDF FAILED 报错堆栈过程
从报错信息来看, 分析不出什么原因, 加上--scan生成扫描报告尝试一下, 跑完之后会出现报告生成的地址, 输入邮箱后就可以看到扫描详情, 通过报告分析出来, 发现使JDK版本过高
生成scan报告 扫描原因解决
方式1: JDK降级到1.8
方式2: 修改源码根目录下的build.gradle, 将makePDF的task注释掉, 从名字来看这个模块应该使负责生成文档的, 不影响源码的使用
测试用例
具体的作用不去赘述了, 可参考 批处理框架spring batch基础知识介绍
简单来说就是, 启动Job --> 读取数据 --> 处理数据 --> 数据写入
1. 运行
官方测试用例说明参考, 我使用的测试是org.springframework.batch.sample.FootballJobFunctionalTests, 运行完test之后会比较懵逼, 不知道数据是如何流转的
count = 12. 分析footballJob.xml
点开/jobs/footballJob.xml, 会发现Bean的注入,数据的输入, 处理和输出都是在这里完成的; 看xml会有点凌乱找不到重点, 别怂刨它就对了
寻找突破点
搜索关键字PLAYER_SUMMARY的计数会变为1?既然是基于sql的操作, 那么必定有个地方会往这张表上插数据, 搜索关键字 insert into player_sum
结合xml和对应的类继续查看, 在Job的Step配置中会引用该Bean, 如果概念模糊在详细查阅一下官网
insert位置 job的step
网友评论