Spring Boot Batch无法将CSV数据写入MySQL:writeCount=0问题排查
Spring Boot Batch导入CSV到MySQL时writeCount=0的排查方案
从给出的Step执行信息:readCount=1000, filterCount=1000, writeCount=0可以明确,所有读取到的CSV数据都被过滤,未进入写入环节,以下是具体排查方向:
检查ItemProcessor逻辑
Spring Batch中ItemProcessor返回null时,该条数据会被自动过滤。filterCount与readCount相等,大概率是自定义Processor处理所有数据时都返回了null。排查点:- 是否存在过于严格的字段校验逻辑(比如非空校验覆盖了所有合法数据)
- 数据转换过程中是否出现未捕获的异常,导致逻辑分支返回null
- 可临时在Processor中添加日志,打印每条输入数据和处理结果,定位具体过滤原因
验证Step的过滤配置
检查Step构建时是否错误配置了过滤规则:- 是否调用了
filter()方法并传入了总是返回true的Predicate,导致全量数据被过滤 - 是否混淆了skip和filter的逻辑,把异常跳过逻辑误设置为数据过滤
- 是否调用了
排查数据校验规则
如果使用了Spring Validator或自定义校验组件:- 确认校验条件是否设置过严,导致所有数据都不满足校验要求
- 临时注释校验逻辑,重新运行Job,若writeCount恢复正常,说明校验规则是问题根源
确认ItemReader读取的有效性
虽然readCount显示为1000,但需验证读取到的数据是否符合预期:- CSV文件是否存在格式错误(比如分隔符不对、字段缺失),导致读取的对象字段全为空,触发Processor的过滤逻辑
- 在Reader之后添加日志,打印读取到的原始数据,确认数据完整性
检查Job重启状态(次要排查点)
提示“Step已完成或不可重启”,但本次readCount非0,说明仍有数据读取,所以此问题概率较低:- 确认Job是否设置了
allowStartIfComplete(true),避免因历史执行状态导致无操作 - 查看JobInstance的执行历史,确认是否存在重复执行同一实例的情况
- 确认Job是否设置了
内容的提问来源于stack exchange,提问作者user21763110
相关产品推荐
相关产品推荐

