【发布时间】:2016-05-23 09:13:43
【问题描述】:
我正在开发一款从 Oracle 数据库中提取记录然后导出为单个表格文件的应用程序。
但是,当我尝试使用 JdbcPagingItemReader 从数据库中读取数据并写入文件时,我只能获得 pageSize 中指定的记录数。所以如果 pageSize 是 10,那么我得到一个有 10 行的文件,其余的记录似乎被忽略了。到目前为止,我还没有找到真正发生的事情,欢迎任何帮助。
这是 JdbcPagingItemReader 配置:
<bean id="databaseItemReader"
class="org.springframework.batch.item.database.JdbcPagingItemReader" >
<property name="dataSource" ref="dataSourceTest" />
<property name="queryProvider">
<bean
class="org.springframework.batch.item.database.support.SqlPagingQueryProviderFactoryBean">
<property name="dataSource" ref="dataSourceTest" />
<property name="selectClause" value="SELECT *" />
<property name="fromClause" value="FROM *****" />
<property name="whereClause" value="where snapshot_id=:name" />
<property name="sortKey" value="snapshot_id" />
</bean>
</property>
<property name="parameterValues">
<map>
<entry key="name" value="18596" />
</map>
</property>
<property name="pageSize" value="100000" />
<property name="rowMapper">
<bean class="com.mkyong.ViewRowMapper" />
</property>
<bean id="itemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter">
<!-- write to this csv file -->
<property name="resource" value="file:cvs/report.csv" />
<property name="shouldDeleteIfExists" value="true" />
<property name="lineAggregator">
<bean
class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
<property name="delimiter" value=";" />
<property name="fieldExtractor">
<bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
<property name="names" value="ID" />
</bean>
</property>
</bean>
</property>
<job id="testJob" xmlns="http://www.springframework.org/schema/batch">
<step id="step1">
<tasklet>
<chunk reader="databaseItemReader" writer="itemWriter" commit-interval="1" />
</tasklet>
</step>
谢谢
【问题讨论】:
-
不,他们改变了他们最终使用的阅读器的使用方式不同
-
尝试将以下属性添加到您的数据源 bean "
" -
如果 possibel 保持 pagesize 和 commit-interval 相同。如果没有任何效果,那么我会说使用 JdbcCursorItemReader 一个一个读取..
标签: java spring spring-batch