我正在使用 Spring Batch 读取 Oracle DB(约 200 万条记录)并写入文件。
下面的代码使用网格大小 = 8 的分区概念。两个作业(Job1,Job2)使用相同的代码来执行。每个作业处理约 100 万个数据。
每个作业有 grid-size=8 * 2 个作业= 16 个并行运行的线程。1 或 2 个线程需要很长时间才能完成。1或2个线程的bcz总执行时间很长。
下面是代码片段。感谢您的建议。
<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>