2013-04-08 4 views
2

Я хочу, чтобы мое пакетное приложение Spring считывало 50 записей из базы данных за один раз, а затем отправляло эти 50 записей на процессор, а затем на запись.Весенняя серия читает несколько записей и обрабатывает несколько записей

Может кто-нибудь рассказать мне, как это можно сделать.

Я попытался использовать JdbcPagingItemReader и установил pageSize to 50, который считывает 50 записей, но rowMapper, процессор и писатель получают одну запись за раз, вместо того, чтобы получать 50 записей.

Как сделать так, чтобы процессор и писатель получали запись 50 в формате dto вместо приема одной записи за раз?

XML весна конфигурации

<job id="indexJob" job-repository="jobRepository"> 
    <step id="job1"> 
     <tasklet transaction-manager="transactionManager"> 
      <chunk reader="reader" processor="processor" writer="writer" commit-interval="1"/> 
     </tasklet> 
    </step> 
</job> 

Конфигурация весной Java

@Bean 
@Scope("step") 
public JdbcPagingItemReader reader() throws Exception { 

    MySqlPagingQueryProvider provider = new MySqlPagingQueryProvider(); 
    provider.setSelectClause("select id"); 
    provider.setFromClause("from BATCH_CUSTOMER"); 
    provider.setSortKey("id"); 

    JdbcPagingItemReader reader = new JdbcPagingItemReader(); 
    reader.setDataSource(this.dataSource()); 
    reader.setQueryProvider(provider); 
    reader.setPageSize(50); 
    reader.setRowMapper(new MyRowMapper()); 
    reader.afterPropertiesSet(); 

    int counter = 0; 
    ExecutionContext executionContext = new ExecutionContext(); 
    reader.open(executionContext); 
    Object pageCredit = new Object(); 
    while (pageCredit != null) { 
     pageCredit = reader.read(); 
     System.out.println("pageCredit:" + pageCredit); 
     counter++; 
    } 
    reader.close(); 

    return reader; 
} 

ответ

4

В вас XML-конфигурации, изменить интервал-совершению до 50.

+0

Это не сработало. MyRowMapper, процессор и писатель по-прежнему получают по одной записи за раз. – hajime

+0

http://forum.springsource.org/showthread.php?136209-JdbcPagingItemReader-not-passing-all-page-records-to-the-processor&p=442538#post442538 – hajime

0

Ответил в Спринг пакетном форуме

http://forum.springsource.org/showthread.php?136209-JdbcPagingItemReader-not-passing-all-page-records-to-the-processor&p=442538#post442538

Это все, что вам нужно, чтобы обработать каждую запись. ItemWriter получает столько записей, сколько вы хотите, но привязано интервалом фиксации. Ваш - 1, что означает, что каждая запись индивидуально выполнена, я предлагаю вам установить ее на 50. Процессор обрабатывает каждую запись сам по себе, пока не будет достигнут интервал фиксации, тогда вызывается сценарий. Как уже упоминалось, ваш № 1.

Смежные вопросы