できるだけ簡潔にするために、
実行を並列スレーブに分割するマスター ステップがあります。
これらのスレーブはそれぞれ、実行されるスレッドの 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 ステートメントをスレーブ ステップの一部として実行する簡単な方法はありますか?