2012-03-02 3 views
0

Я пытаюсь передать параметр в свой запрос весной. Я решил создать тасклет и использовать JdbcTemplate следующим образом ...Использование JdbcTemplate с именованными параметрами в весенней партии

public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) 
     throws EpsilonBatchBusinessException { 

    LOGGER.debug("Enter execute."); 

    JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); 

    jdbcTemplate.query(queryString, 
     new PreparedStatementSetter() { 
      public void setValues(PreparedStatement preparedStatement) throws SQLException { 
       preparedStatement.setInt(1, runNumber); 
      } 
     }, 
     rowMapper); 

    LOGGER.debug("Exit execute."); 

    return RepeatStatus.FINISHED; 
} 

Так я инъекционный к этой фасоли в DataSource, QueryString, объект rowMapper, а параметр (runNumber) .. Это тасклет будут называться в пределах шаг для создания списка. Я обычно передаю преобразователь строк в весовой компонент JdbcCursorItemReader и не буду писать тасклету, но моя строка запроса нуждается в параметре, поэтому я пишу эту задачу. Просто не уверен, что эта задача будет делать трюк, как с JdbcCursorItemReader? Ваш ввод будет оценен

ответ

1

Лучшим вариантом было бы использовать JdbcCursorItemReader и написать обычай PreparedStatementSetter.

Интерфейс PreparedStatementSetter очень прост; почти весь код, который вам нужно написать, ниже. После того, как сеттер написан, все, что вам нужно сделать, это настроить его как новый компонент с значением runNumber, введенным в конфигурацию, а затем вставить этот компонент в JdbcCursorItemReader. Это позволяет вам использовать все обычные ItemReader s и ItemWriter s вместо того, чтобы выполнять все вручную вручную в Tasklet.

package com.foo; 

import java.sql.PreparedStatement; 
import java.sql.SQLException; 

import org.springframework.jdbc.core.PreparedStatementSetter; 


public class YourParamSetter implements PreparedStatementSetter { 


    private int runNumber; 

    public void setValues(PreparedStatement ps) throws SQLException { 

     ps.setInt(1, runNumber); 

    } 

    public void setRunNumber(int runNumber) { 
     this.runNumber = runNumber; 
    } 

    public int getRunNumber() { 
     return runNumber; 
    } 

} 
+0

спасибо lckster;) – sonx

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