Hi All,
I have problem handling partitioning with ThreadPoolTaskExecutor. This configuration is working fine with 27 records processed in one seconds, but my goal is processing 120 records per second. When i enable task-executor handler, batch job execution never completed. Do you have any suggestion how to run several threads to process my partitioning data?.
FYI, my company code record count is greater than 50 records.
My batch configuration is :
Thanks,Code:<beans:bean id="lendingMasterItemReader" class="org.springframework.batch.item.database.HibernateCursorItemReader" scope="step"> <beans:property name="sessionFactory" ref="sessionFactory"/> <!-- <beans:property name="queryString" value="from LendingMaster lm where lm.status = 'NEW'"/> --> <beans:property name="queryString" value="from LendingMaster lm where lm.status = 'NEW' and lm.companyCode = :companyCode"/> <beans:property name="parameterValues"> <beans:map> <beans:entry key="companyCode" value="#{stepExecutionContext['companyCode']}" /> </beans:map> </beans:property> <beans:property name="fetchSize" value="10"/> </beans:bean> <beans:bean id="lendingMasterItemProcessor" class="com.ati.if.service.BatchLendingItemProcessor"> </beans:bean> <beans:bean id="lendingMasterItemWriter" class="org.springframework.batch.item.database.HibernateItemWriter"> <beans:property name="sessionFactory" ref="sessionFactory"/> </beans:bean> <step id="processNewLendingRecord"> <tasklet> <chunk reader="lendingMasterItemReader" processor="lendingMasterItemProcessor" writer="lendingMasterItemWriter" commit-interval="10"/> </tasklet> </step> <beans:bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> <beans:property name="corePoolSize" value="5"/> <beans:property name="maxPoolSize" value="5" /> <beans:property name="queueCapacity" value="100"/> </beans:bean> <beans:bean id="partition" class="com.ati.if.service.BatchLendingItemPartition"> </beans:bean> <job id="lendingMasterJob"> <step id="partitioningStep"> <partition step="processNewLendingRecord" partitioner="partition"> <!-- <handler task-executor="taskExecutor" grid-size="10"/> --> </partition> </step> </job> <beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <beans:property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver"/> <beans:property name="url" value="jdbc:jtds:sqlserver://localhost:1433/ati_if"/> <beans:property name="username" value="sa"/> <beans:property name="password" value="123456"/> <beans:property name="maxActive" value="1000"/> <beans:property name="maxWait" value="1000"/> <beans:property name="poolPreparedStatements" value="true"/> <beans:property name="defaultAutoCommit" value="true"/> <beans:property name="initialSize" value="20"/> </beans:bean>
Andi


Reply With Quote