2015-01-21 3 views
3

Я реализовал ItemReader с JdbcTemplate.ItemReader reader() в бесконечном цикле

Проблема заключается в том, что read() вызывается в бесконечном цикле.

public class MyReader implements ItemReader<Col>, InitializingBean { 
    private JdbcTemplate jdbcTemplate; 
    private RowMapper<Col> rowMapper; 
    private String sql; 
    private DataSource dataSource; 

public Col read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException { 
    Col col = jdbcTemplate.queryForObject(sql,null, rowMapper);    
    return col; 
    } 

} 

Спринг конфигурация партии:

<chunk reader="itemReader" writer="itemWriter" 
      processor="itemProcessor" commit-interval="1" /> 


<bean id="itemReader" 
    class="batch.MyReader" 
    scope="step"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="sql" value="#{stepExecutionContext[sql]}" /> 
    <property name="rowMapper"> 
     <bean class="batch.ColMapper" /> 
    </property> 
</bean> 
+1

И почему бы и нет? Он будет вызываться до тех пор, пока метод 'read' возвращает что-то, он закончится, когда метод вернет« null ». Также почему вы не используете один из стандартных «ItemReader»? Похоже, вы можете просто использовать один из значений по умолчанию вместо того, чтобы реализовать свой собственный ... –

+0

Я раньше использовал JdbcCursorItemReader, но в моем случае мне нужно вернуть только первую строку. (Одно поле) – Tirmean

ответ

3

Вот так шаг Spring Batch работы: метод ItemReader.read() будет называться, пока он не возвращает нуль.

+0

Что я могу сделать? Я не использую JdbcCursorItemReader, потому что мне нужно вернуть только первую строку. (Одно поле) – Tirmean

+0

Использование ItemReader для чтения только одной строки кажется излишним ... но в любом случае самое простое решение имеет флаг для возврата null, когда метод чтения вызывается более одного раза –

+0

Я использую ItemReader becasue, мне нужно получить несколько значения из нескольких sqls. Поэтому я использую выполнение секционирования с помощью SimpleAsyncTaskExecutor – Tirmean

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