Oracle DB(〜200万レコード)の読み取りとファイルへの書き込みに春のバッチを使用しています。
以下のコードは、grid-size=8 のパーティションの概念を使用しています。2 つのジョブ (Job1、Job2) が同じコードを使用して実行されます。各ジョブは最大 100 万のデータを処理します。
各ジョブの grid-size=8 * 2 jobs= 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>