You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Batch SkipListener的onSkipInWrite方法在Oracle环境下异常多次触发的问题求助

Spring Batch SkipListener的onSkipInWrite方法在Oracle环境下异常多次触发的问题求助

大家好,我最近在做Spring Batch开发时碰到了一个特别费解的问题,想过来求助一下各位同行:

我有一个Spring Batch作业,里面只包含一个Step,并且实现了SkipListener接口来处理跳过的记录。

问题描述

核心问题是:当ItemWriter以chunk为单位往Oracle数据库插入数据时,如果某一条插入触发了错误(比如违反主键约束这类完整性错误),SkipListener中的onSkipInWrite方法会被多次调用,每次传入不同的“疑似错误记录”,但实际上数据库里只有那条真正有问题的记录被跳过了,其他记录都正常插入成功了。

具体测试用例

我整理了两个实际测试场景,能更直观地展示这个异常现象:

第一个用例

  • 操作:ItemWriter往Oracle表中插入主键为1、2、3、4、5、6、7、7、8、9的记录(其中主键7被重复插入,这会触发主键约束错误)
  • 现象:SkipListener的onSkipInWrite方法被分别针对7、2、3、4、9这些记录触发,但去数据库查询后发现,只有主键7的记录被跳过了,2、3、4、9都正常插入成功了

第二个用例

  • 操作:ItemWriter往Oracle表中插入主键为1、2、3、4、5、6、7、8、9的记录(所有主键唯一,无冲突)
  • 现象:SkipListener的onSkipInWrite方法完全没有被触发,这符合预期

我现在完全搞不懂为什么会出现这种“误触发”的情况,明明很多记录已经成功插入了,却被当成跳过的记录通知给了Listener。有没有大佬遇到过类似的问题,或者能给我一些排查的方向呀?

备注:内容来源于stack exchange,提问作者IntegraleOne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 11:03:01