我的批处理工作' 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的写作者。
有人能指出我哪里出错吗?
答案 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。