在Spring Batch中读取同一组记录

时间:2015-04-22 06:25:10

标签: spring spring-batch mybatis

我的批处理工作' MyBatisPagingItemReader'正在阅读同一组记录。以下是配置。

<job id="synchBatchJob">
    <step id="simpleStep">
        <tasklet>
            <chunk reader="synchItemReader" processor="synchBatchProcessor" writer="synchItemWriter"
                   **commit-interval="10"**>
              <listeners>
        <listener ref="synchBatchStepListener" />
        </listeners>
            </chunk>
        </tasklet>
    </step>
</job>

<bean id="synchItemReader"
         class="org.mybatis.spring.batch.MyBatisPagingItemReader" scope="step" >
        <property name="sqlSessionFactory" ref="sqlSessionFactory" />
        <property name="parameterValues" ref="syncJobParams" />
        <property name="queryId" value="getStagingData" />
        <property **name="pageSize" value="10"** />
    </bean>
<util:map id="syncJobParams" scope="step">
        <entry key="activityId" 
               value="#{jobParameters['activity.id']}"/>
    </util:map>

我已经提到&#34; commit-interval&#34;在步骤定义&amp; &#34; pageSize的&#34;在MyBatisPagingItemReader中作为&#34; 10&#34;。我在表中共有12条记录。我的读者总是给我前10组记录。 但如果我提及&#34; pageSize&#34; = 100,Iam在写一个正确的时候,每个集合中有两个10和2的写作者。

有人能指出我哪里出错吗?

1 个答案:

答案 0 :(得分:0)

您的查询不完整,但在您的配置中,您已将pagesize提到10但您尚未修改查询以支持您的配置。

<select id="getStagingData" resultType="hashmap" > 
    select * from (
    select * from (
    SELECT * 
    FROM ACTIVITY_DATA 
    WHERE ACTIVITY_ID = #{activityId}
    order by activityId
   )) where ROWNUM_ <![CDATA[ > ]]> ( #_page# * #_pagesize# )
) where ROWNUM <![CDATA[ <= ]]> #_pagesize#

</select>

注意:此配置特定于oracle,您需要根据数据库实现修改ROWNUM。