在springbatch的job注册配置里有个validateTransactionState的配置项,官方默认为true。校验job完成是否有事物包裹。
官方建议不要设置false,如果设置为true,如果启动时job外层包裹事物,则会报错误无法启动,设置为false可以启动。
以下是外部包裹事物,且设置校验参数为false 遇到的bug情况之一。(不听老人言吃亏在眼前)
在step中会执行chunk,每个chunk会通过semaphore共享锁来控制事物,采用同步来处理每个chunk
在chunk单个事物提交时会释放锁
这是正常流程。但是如果外部包裹了事物,会让第一个chunk完成事无法提交事物让锁无法释放,后续的chunk来了,就需要等待资源,导致job一直等待。导致外部事物整体无法提交。
所以最好还是挺官方的劝不要再job外部包裹事物。