【发布时间】:2018-11-13 22:29:37
【问题描述】:
尽量简洁,
我有一个主步骤,将执行拆分为并行从属。
这些从站每个都有自己的上下文,其中存储了它们执行的线程的 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 的自定义类,但我担心通过将单个值映射到对象会产生不必要的开销。
有没有一种简单的方法可以让我在从属步骤中执行这个更新语句?
【问题讨论】:
标签: java spring spring-boot spring-batch