现在我知道我们可以使用Parallel Steps(http://docs.spring.io/spring-batch/trunk/reference/html/scalability.html 7.2)在spring批处理中运行并发步骤 . 我做到了并且取得了成功 . 但是,当我看到数据库发生的事情时,表中的人员记录是用其他人信息更新的,尽管我已经使我的ItemProcessor同步 . 关于什么工作正在做的背景很简单,只需处理来自部门(200,400)的人员表的人员记录并写入平面文件 . 当我看到平面文件时,我可以看到记录,来自部门200的人用来自部门400的人员信息写出来 . 我需要处理的任何事情都需要帮助吗?

<batch:job id="dept">
    <batch:step id="dojStep1" parent="dojMainStep1" next="parallelProcessMatch">
    </batch:step>
    <batch:split id="parallelProcessMatch" task-executor="taskExecutor">
        <batch:flow>
            <batch:step id="step200" parent="dojMainStep200" >
            </batch:step>
        </batch:flow>
        <batch:flow>
            <batch:step id="step400" parent="dojMainStep400" >
            </batch:step>
        </batch:flow>
    </batch:split>
</batch:job>

<bean id="taskExecutor" class="org.springframework.core.task.SimpleAsyncTaskExecutor"/>


<!-- Start parallelProcessMatch -->
<!-- Start dojMainStep200 -->
<batch:step id="dojMainStep200" abstract="true">
    <batch:tasklet>
        <batch:chunk commit-interval="1000" reader="dojDbReader200"
            processor="dojMatchItemProcessor200" writer="dojClassifierMatchReportWriter200">
            <batch:streams>
                <batch:stream ref="itemWriterMatch200" />
                <batch:stream ref="itemWriterUnMatch200" />
            </batch:streams>
        </batch:chunk>
    </batch:tasklet>
    <batch:listeners>
        <batch:listener ref="dojMatch200PageHeaderCallback" />
        <batch:listener ref="dojUnMatch200PageHeaderCallback" />
        <batch:listener ref="dojInPageFooterCallback" />
    </batch:listeners>
</batch:step>

<bean id="dojMatchItemProcessor200"
    class="com.batchinterface.dept.recordresultsvr.DojMatchItemProccesor"
    p:holdingTankDao-ref="holdingTankDao" p:rsdProvider-ref="rsdProvider" p:searchProvider-ref="searchProvider"  />

<bean id="dojDbReader200"
    class="org.springframework.batch.item.database.StoredProcedureItemReader"
    p:dataSource-ref="oracleDataSource" p:rowMapper-ref="dojMatchRowMapper200"
    scope="step" p:function="false" p:procedureName="PKG_JOIN.PRC_SELECT"
    p:preparedStatementSetter-ref="dojmatchpropertySetter200"
    p:refCursorPosition="1">
    <property name="parameters">
        <list>
            <bean class="org.springframework.jdbc.core.SqlOutParameter">
                <constructor-arg index="0" value="c1" />
                <constructor-arg index="1">
                    <util:constant static-field="oracle.jdbc.OracleTypes.CURSOR" />
                </constructor-arg>
            </bean>
            <bean class="org.springframework.jdbc.core.SqlParameter">
                <constructor-arg index="0" value="dept" />
                <constructor-arg index="1">
                    <util:constant static-field="oracle.jdbc.OracleTypes.VARCHAR" />
                </constructor-arg>
            </bean>
        </list>
    </property>
</bean>

<bean id="dojmatchpropertySetter200"
    class="com.batchinterface.dept.recordresultsvr.DojPreparedStateSetter">
    <property name="dept" value="200" />
</bean>

<bean id="dojMatchRowMapper200"
    class="com.batchinterface.dept.recordresultsvr.DojMatchRowMapper" />

<bean id="dojClassifierMatchReportWriter200"
    class="org.springframework.batch.item.support.ClassifierCompositeItemWriter"
    p:classifier-ref="dojMatchClassifier200">
</bean>

<bean id="dojMatchClassifier200"
    class="com.batchinterface.dept.recordresultsvr.DojMatchReportClassifier"
    p:itemWriterMatch200-ref="itemWriterMatch200"
    p:itemWriterUnMatch200-ref="itemWriterUnMatch200"
    p:lastRunDate-ref="LastSuccessfulRunDate200">
</bean>
<!-- End dojMainStep200 -->
<!-- Start dojMainStep400 -->
<batch:step id="dojMainStep400" abstract="true">
    <batch:tasklet>
        <batch:chunk commit-interval="1000" reader="dojDbReader400"
            processor="dojMatchItemProcessor400" writer="dojClassifierMatchReportWriter400">
            <batch:streams>
                <batch:stream ref="itemWriterMatch400" />
                <batch:stream ref="itemWriterUnMatch400" />
            </batch:streams>
        </batch:chunk>
    </batch:tasklet>
    <batch:listeners>
        <batch:listener ref="dojMatch400PageHeaderCallback" />
        <batch:listener ref="dojUnMatch400PageHeaderCallback" />
        <batch:listener ref="dojInPageFooterCallback" />
    </batch:listeners>
</batch:step>

<bean id="dojMatchItemProcessor400"
    class="com.batchinterface.dept.recordresultsvr.DojMatchItemProccesor"
    p:holdingTankDao-ref="holdingTankDao" p:rsdProvider-ref="rsdProvider" p:searchProvider-ref="searchProvider"  />

<bean id="dojDbReader400"
    class="org.springframework.batch.item.database.StoredProcedureItemReader"
    p:dataSource-ref="oracleDataSource" p:rowMapper-ref="dojMatchRowMapper400"
    scope="step" p:function="false" p:procedureName="PKG_JOIN.PRC_SELECT"
    p:preparedStatementSetter-ref="dojmatchpropertySetter400"
    p:refCursorPosition="1">
    <property name="parameters">
        <list>
            <bean class="org.springframework.jdbc.core.SqlOutParameter">
                <constructor-arg index="0" value="c1" />
                <constructor-arg index="1">
                    <util:constant static-field="oracle.jdbc.OracleTypes.CURSOR" />
                </constructor-arg>
            </bean>
            <bean class="org.springframework.jdbc.core.SqlParameter">
                <constructor-arg index="0" value="dept" />
                <constructor-arg index="1">
                    <util:constant static-field="oracle.jdbc.OracleTypes.VARCHAR" />
                </constructor-arg>
            </bean>
        </list>
    </property>
</bean>

<bean id="dojmatchpropertySetter400"
    class="com.batchinterface.dept.recordresultsvr.DojPreparedStateSetter">
    <property name="dept" value="400" />
</bean>

<bean id="dojMatchRowMapper400"
    class="com.batchinterface.dept.recordresultsvr.DojMatchRowMapper" />

<bean id="dojClassifierMatchReportWriter400"
    class="org.springframework.batch.item.support.ClassifierCompositeItemWriter"
    p:classifier-ref="dojMatchClassifier400">
</bean>

<bean id="dojMatchClassifier400"
    class="com.batchinterface.dept.recordresultsvr.DojMatchReportClassifier"
    p:itemWriterMatch400-ref="itemWriterMatch400"
    p:itemWriterUnMatch400-ref="itemWriterUnMatch400"
    p:lastRunDate-ref="LastSuccessfulRunDate400">
</bean>
<!-- End dojMainStep400 -->
<!-- End parallelProcessMatch -->