Записывает, опущены от запроса с использованием JPAPAGINGITEMREADER во время чтения - PullRequest
0 голосов
/ 07 ноября 2018
<batch:job id="xyzJob" job-repository="jobRepository"
    incrementer="jobParametersIncrementerImpl" restartable="false">
    <batch:step id="feeStep">
        <batch:tasklet transaction-manager="transactionManager" allow-start-if-complete="true">
            <batch:chunk reader="xyzReader" processor="xyzProcessor"
                writer="xyzWriter" commit-interval="4" >
                <batch:streams>
                    <batch:stream ref="fileWriter"/>
                </batch:streams>
            </batch:chunk>
            <batch:listeners>
                <batch:listener ref="stepExecutionListener"/>
            </batch:listeners>
        </batch:tasklet>
    </batch:step>
    <batch:listeners>
        <batch:listener ref="xyzJobListener" />
    </batch:listeners>
</batch:job>

<bean id="xyzProcessor" class="com.batch.core.processor.XYZProcessor" scope="step">
    <property name="fundDAO" ref="fundDAO"/>
    <property name="loanDAO" ref="loanDAO"/>
    <property name="aumBlnceDAO" ref="aumBalanceDAO"/>
    ---
    --
</bean> 


<bean id="xyzWriter" class="org.springframework.batch.item.support.CompositeItemWriter">
        <property name="delegates">
            <list>
                <bean class="com.batch.core.writer.xyzWriter">
                        <property name="xyzDetailsDomain" ref="xyzDetailsDomain" />
                        <property name="xyzHistoryDomain" ref="xyzHistoryDomain"></property>
                </bean>
                <ref bean="fileWriter"/>
            </list>
        </property>
</bean>

<bean id="xyzReader" class="org.springframework.batch.item.database.JpaPagingItemReader" scope="step">  
   <property name="entityManagerFactory" ref="batchEntityManagerFactoryBean"/> 
   <property name="queryString"> 
      <value><![CDATA[
              SELECT pe, pap 
              FROM A pe, B pap 
              WHERE pap.userID =pe.userID and pe.status = 'E' 
              and pe.startDT <= '#{jobExecutionContext[previousQuarterEndDate]}' 
              and (pe.endDT is null 
              or pe.endDT > '#{jobExecutionContext[previousQuarterEndDate]}')]]>
       </value>
   </property>  
   <property name="pageSize" value="1000"/> 
   <property name="saveState" value="false" /> 
</bean>

Когда этот весенний пакет работает, то, что я заметил, иногда пропускает некоторые записи при чтении данных из таблиц ... эта проблема не соответствует ... но из 10 раз это может произойти 1 раз.

Пожалуйста, помогите мне решить эту проблему. Заранее спасибо. !!

1 Ответ

0 голосов
/ 07 ноября 2018

JpaPagingItemReader не пропускает записи. Вероятно, в вашем случае происходит то, что некоторые записи, соответствующие вашим критериям поиска, добавляются, когда ваш читатель читает данные. Это может привести к неправильному вычислению страницы, и некоторые элементы могут показаться пропущенными, но это не так.

Задание пакетной обработки по определению действует на фиксированный набор данных. Если ваш запрос возвращает фиксированный набор данных во время выполнения задания, одни и те же страницы должны возвращаться для каждого запуска задания. Если, с другой стороны, другой процесс вставляет данные, которые могут быть возвращены вашим запросом, проблема может возникнуть.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...