Spring批处理,管理项目处理器中完成的事务项的回滚

时间:2015-08-27 18:29:13

标签: spring-batch transactional jsr352

这涉及使用JSR作业,因此我无权在作业规范中使用tasklet定义。我已经给出的方向是,就工作规范而言,仅支持JSR 352功能。

这是一份工作的例子:

<job id="xmlWriter" xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="1.0">
<step id="firstStep">
    <chunk item-count="2">
        <reader ref="DelimitedFlatFileReader">
            <properties>
                <!-- Reads in from file Test.csv -->
                <property name="fileNameAndPath" value="#{jobParameters['readerFileNameAndPath']}" />
                <property name="fieldNames" value="firstName, lastName, city" />
                <property name="fullyQualifiedTargetClass" value="com.test.test.DatabaseMember" />
            </properties>
        </reader>
        <processor ref="com.test.test.ItemProcessor" />
        <writer ref="FlatFileWriter" >
            <properties>
                <property name="appendOn" value="true" />
                <!-- Read to file demoXMLReaderFlatFileWriterOutput.txt -->
                <property name="fileNameAndPath" value="#{jobParameters['writerFileNameAndPath']}" />
                <property name="fullyQualifiedTargetClass" value="com.test.test.DatabaseMember" />
            </properties>
        </writer>
    </chunk>
</step>

在ItemProcessor中,我感兴趣的是有一些类型的回调/监听器,如果chunck例如在写入步骤期间失败,则可以触发回滚内部发生的事务项。

所以一个很好的例子就是我在ItemProcessor中发生了某种db或jms操作。如果在编写器部分期间chunck失败,我会想要回滚在项目处理器期间发生的所有那些在此迭代中的操作(或者项目计数> 1的几个操作)。

我已经研究了基于jsr规范的各种可用侦听器,似乎没有任何东西允许这种类型的实现。此外,spring似乎并没有像处理真正的spring批处理那样将处理器包装在事务中。测试我在创建数据库连接并测试它们以查看它们是否具有事务感知时总是返回false。

在我完全自定义的实施之外,我是否正在寻找甚至是可能的,如果有的话,是否有任何关于如何实现它的指导。

0 个答案:

没有答案