2

できるだけ簡潔にするために、

実行を並列スレーブに分割するマスター ステップがあります。

これらのスレーブはそれぞれ、実行されるスレッドの ID を格納する独自のコンテキストを持っていますrunNumber。それらは、リーダー、プロセッサー、ライターのステップです。このスレーブの書き込みは、私が関心を持っているものです。CompositeItemWriterデータベースでスレッドの成功を更新するSQL更新ステートメントを実行したいライターがいます。このライターは以下です。

@Bean
@StepScope
public JdbcBatchItemWriter<TraceDataDto> controlSuccessWriter(
        @Value("#{jobExecutionContext['runNumber']}") int runNumber,
        @Qualifier("veDataSource") DataSource veDataSource) {
    JdbcBatchItemWriter<TraceDataDto> mysqlWriter = new JdbcBatchItemWriter<>();

    mysqlWriter.setDataSource(veDataSource);

    String sql = "UPDATE control SET status=1 WHERE run_number=" + runNumber;

    mysqlWriter.setSql(sql);

    return mysqlWriter;
}

現在、エラーが発生するため、これに問題があります。

java.lang.IllegalArgumentException: '?' を含む SQL ステートメントを使用しています プレースホルダーには ItemPreparedStatementSetter が必要です

これで、実装するカスタム クラスを作成する方法があることがわかりましたが、ItemPreparedStatementSetter単一の値をオブジェクトにマッピングすることで不要なオーバーヘッドが発生するのではないかと懸念しています。

この update ステートメントをスレーブ ステップの一部として実行する簡単な方法はありますか?

4

2 に答える 2