我正在使用Spring批处理读取Oracle DB(约2百万条记录)并写入文件。
以下代码使用grid-size = 8的分区概念。两个作业(Job1,Job2)使用相同的代码来执行。每个工作过程〜100万个数据。
每个作业都有grid-size = 8 * 2个作业= 16个并行运行的线程。 1或2个线程需要很长时间才能完成。 Borz的1或2个线程的总执行时间非常长。
以下是代码段。感谢您的建议。
<bean id="dataSource" class="com.aap.batch.common.DataSourceJdbc"><!--Connection details -->
<bean id="jDBCTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="taskExecutor" class="org.springframework.core.task.SimpleAsyncTaskExecutor" />
<step id="masterStep" >
<partition step="slave" partitioner="rangePartitioner" >
<handler grid-size="8" task-executor="taskExecutor" />
</partition>
</step>
<step id="slave" xmlns="http://www.springframework.org/schema/batch">
<tasklet>
<chunk reader="fetchReader" writer="flatFileWriter" processor="dataProcessor" commit-interval="100" />
</tasklet>
</step>
<bean name="rangePartitioner" id="rangePartitioner" class="com.aap.batch.RangePartitioner" scope="step" >
<property name="jDBCTemplate" ref="jDBCTemplate" />
</bean>
<bean name="fetchReader" id="fetchReader" class="com.aap.batch.FetchReader" scope="step" >
<property name="jDBCTemplate" ref="jDBCTemplate" />
</bean>