2015-04-22 58 views
0

我的批處理作業'MyBatisPagingItemReader'正在讀取同一組記錄。以下是配置。在Spring批處理中讀取同一組記錄

<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> 

我在MyBatisPagingItemReader提到的 「提交間隔」 在步驟定義& 「的pageSize」 爲 「10」。表中共有12條記錄。我的讀者總是給我第一組10條記錄。 但是,如果我提到「pageSize」= 100,那麼Iam在每個集合中寫入10和2時向兩位作者發出兩個調用,這是正確的。

任何人都可以指出我哪裏出錯了嗎?

+1

讓我們看看您的查詢,與您的查詢問題。 –

+0

下面是查詢的MyBatis這是相當簡單 <選擇ID = 「getStagingData」 與resultType = 「散列映射」> SELECT * FROM ACTIVITY_DATA WHERE ACTIVITY_ID =#{activityId} –

回答

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> 

注:這種配置是專門針對需要修改ROWNUM根據你的數據庫實現預言。

相關問題