我在Spring Batch中有一个chunk tasklet。处理器读取表格A,当记录不存在时,写入者写入表格A.当我将commit-interval配置为1时,它可以正常工作。
当我将commit-interval配置为更高的数字时,我得到了dublicate entry execptions,因为处理器没有得到脏的读取信息。
我的Tasklet配置了一个read uncommit语句:
batch:transaction-attributes isolation = "READ_UNCOMMITTED"
我认为我的配置中不接受此配置?有什么想法吗?
答案 0 :(得分:0)
您不应该遇到此问题,因为(通常)以这种方式管理读取/处理/写入:
您不需要使用READ_UNCOMMITTED
,但更简单:
ItemReader<S>
(一个JdbcCursorItemReader
应该没问题)ItemProcessor<S,T>
ItemWriter<T>
,根据其在数据库中的存在来编写/更新对象如果要减少要使用自定义编写器写入的项目,可以在处理阶段过滤掉重复的对象:您可以使用映射来实现此目标,以存储@jackson所描述的重复项目(仅适用于当前块)项目,而不是数据库中的所有行 - 此步骤稍后由ItemWriter
)
答案 1 :(得分:-1)
听起来像是一个设计问题。
你应该做的是...... 1)听起来你应该引入一个缓存/映射来存储你计划提交的条目,但还没有写入db。
如果条目已在表A中或缓存中,则跳过。 如果条目不在表A或缓存中,则将副本保存到缓存中,并将其添加到作者要写入的候选列表中。