2012-03-02 19 views
0

春バッチでクエリにパラメータを渡そうとしています。私は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; 
} 

だからこのタスクレットは内で呼び出されます。これBeanにデータソース、のqueryString、RowMapperのオブジェクト、およびパラメータ(runNumber)を注入しています...タスクレットを作成し、次のようにJdbcTemplateを使用することにしましたステップを実行してリストを作成します。私は通常、行マッパをJdbcCursorItemReader Spring Beanに渡し、タスクレットを書きませんが、クエリ文字列にはパラメータが必要なので、このタスクレットを記述しています。このタスクレットがJdbcCursorItemReaderのようにこのトリックを行うかどうか分かりませんか?あなたの入力は高く評価されます

答えて

1

より良いオプションはJdbcCursorItemReaderを使用し、カスタムPreparedStatementSetterを書くことです。

PreparedStatementSetterインターフェイスは非常に簡単です。あなたが書く必要のあるコードはすべて以下の通りです。 setterが書かれたら、コンフィグレーションにrunNumberの値を注入した新しいbeanとしてコンフィグレーションしてから、そのbeanをJdbcCursorItemReaderに挿入するだけです。これにより、Taskletに手作業ですべてを実装する代わりに、すべて通常のItemReaderItemWriterを使用することができます。

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

関連する問題