Spring数据 - db到jms - 如何设置已处理的标志?

时间:2014-05-09 22:16:47

标签: java spring spring-batch

Spring批次新手......

我已经设置了一个Spring批处理项目,该项目使用自定义ItemReader从数据库中读取项目,使用ItemProcessor将它们转换为XML,并将它们放在ItemWriter中的JMS队列中。

<batch:job id="sendItemsToJMS" job-repository="myJobRepository">
    <batch:step id="sendItemsToJMSStep">
        <batch:tasklet>
            <batch:chunk reader="itemReader" 
                         processor="itemProcessor" 
                         writer="itemWriter" commit-interval="10">
            </batch:chunk>
        </batch:tasklet>
    </batch:step>
</batch:job>

在块的同一事务中需要发生的事情是将数据库中的原始项标记为已发送。

这种逻辑会在哪里?我是否需要在同一步骤中设置一个额外的Tasklet,如文档中似乎建议的那样(5.2.1.TaskletAdapter)

如果是这样的话: - 它是在同一个交易中执行的吗? - 如何在tasklet中获取已处理ID的列表?

干杯!

1 个答案:

答案 0 :(得分:0)

void ItemWriteListener.afterWrite(List<? extends S> items)
  

在ItemWriter.write之后调用(java.util.List)这将在任何事务提交之前和ChunkListener.afterChunk(ChunkContext)之前调用

实现此功能,并在内部执行标志更新。