在JdbcPagingItemReader生成的查询中添加“with ur”或任何其他前缀

时间:2014-12-23 09:14:19

标签: spring jdbc db2 batch-processing spring-batch

我正在编写一个java应用程序来从一个表中读取数据并将其写入某个文件中。我们的表有数百万条记录,我们需要每天阅读 并写入文件。所以,我使用Spring批量读取器作为JdbcPagingItemReader,因为我想读取页面中的记录。 下面是我的bean定义: -

<bean id="pagingItemReader" 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 user_id, user_name , address" />
        <property name="fromClause" value="from mySchema.test" />
        <property name="whereClause" value="where address <> ''" />
        <property name="sortKey" value="user_id" />
      </bean>
    </property>
    <property name="pageSize" value="1000" />
    <property name="rowMapper">
        <bean class="com.myCompany.myClient.batch.reader.userVO" />
    </property>
</bean>

Spring在内部生成查询,如下所示: -

SELECT user_id, user_name , address  FROM mySchema.test ORDER BY user_id ASC FETCH FIRST 1000 ROWS ONLY

但是,我正在使用DB2数据库,使用全局设置在读取期间锁定。所以避免这种情况,我们在每个查询中使用“with ur”,我们写。 所以我希望我的查询生成为: -

   SELECT user_id, user_name , address  FROM mySchema.test ORDER BY user_id ASC FETCH FIRST 1000 ROWS ONLY with ur

我无论如何也无法找到相同的东西。请告诉我如何在使用JdbcPagingItemReader时在查询中附加一些额外的部分。

1 个答案:

答案 0 :(得分:2)

JdbcPagingItemReader允许您设置PagingQueryProvider;也许使用自定义的 - 而不是使用由SqlPagingQueryProviderFactoryBean生成的那个 - 可以解决您的问题