【问题标题】:JdbcPagingItemReader in Spring batch is not giving correct resultsSpring批处理中的JdbcPagingItemReader没有给出正确的结果
【发布时间】:2015-06-25 19:02:18
【问题描述】:

我面临的问题是记录从 querypagination 配置返回,我给出了不正确的记录编号。分页配置不正确。 分页返回较少的记录数。

查询等效的分页配置

select * from SOME_TABLE where CLIENT_FILE_NM= 'process_abc.20150617024850' AND TXN_ID IS NOT NULL AND SOME_DATA IS NOT NULL order by CREATE_DT ASC;

分页配置

     <bean id="postItemReader"
                class="org.springframework.batch.item.database.JdbcPagingItemReader"
                scope="step">
                <property name="dataSource" ref="dataSource" />
                <property name="queryProvider">
                    <bean
                        class="org.springframework.batch.item.database.support.SqlPagingQueryProviderFactoryBean">
                        <property name="dataSource" ref="dataSource" />
                        <property name="selectClause" value="select *" />
                        <property name="fromClause" value="from SOME_TABLE" />
                        <property name="whereClause"
                            value="CLIENT_FILE_NM= :fileName AND TXN_ID IS NOT NULL AND SOME_DATA IS NOT NULL" />
                        <property name="sortKey" value="CREATE_DT" />
                        <!-- CARD_SETTL_STG_ID_PK ASC -->
                    </bean>
                </property>
                <property name="parameterValues">
                    <map>
                        <entry key="fileName" value="#

{jobParameters['fileName']}" />
                    </map>
                </property>
                <property name="pageSize" value="10" />
                <property name="rowMapper">
                    <bean class="com.wdpr.payment.batch.mapper.OutputVOMapper" />
                </property>
                <property name="saveState" value="false"/>
            </bean>

【问题讨论】:

  • 你用的是什么数据库?

标签: spring oracle spring-batch


【解决方案1】:

问题得到解决,因为 sortKey 必须是唯一键。 Spring以以下格式创建查询: SELECT * FROM (SELECT * FROM CRD_SETTL WHERE CLIENT_FILE_NM= :fileName AND TXN_ID IS NOT NULL AND SETTL_DATA IS NOT NULL ORDER BY CREATE_DT ASC) WHERE ROWNUM &lt;= 10 AND ((CREATE_DT &gt; :_CREATE_DT))

会丢失记录。

&lt;property name="sortKey" value="CREATE_DT" /&gt; // 这不是唯一的...

【讨论】:

  • 知道为什么OraclePagingQueryProvider API 默认只获取 10 条记录吗?
【解决方案2】:

检查数据库中的数据。我认为问题与 IS NOT NULL 比较有关,具体取决于您的数据库引擎和表定义,NULL 可以用不同的方式解释。尝试比较 TXN_ID != '',或 > 0,具体取决于您的数据类型。

【讨论】:

  • 谢谢我按照你的建议尝试了。但它没有用。你有任何其他建议
猜你喜欢
  • 2014-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-01
  • 2019-05-31
  • 2019-11-18
相关资源
最近更新 更多