我还没有看到一个脚本来进行必要的DDL修改,以便从MySQL中的Spring Batch 2 - > 3开始.好奇如果存在?
我正在使用Spring Batch设置作业服务器。我的JdbcCursorItemReader需要使用sql进行配置,该sql会根据每个作业的运行情况进行更改。因为sql发生了变化,所以我希望读者拥有@StepScope,所以我不必担心sql的有状态性。
所以我设置了一个像这样的类:
public class ParameterSettingJdbcCursorItemReader extends JdbcCursorItemReader implements StepExecutionListener {
@Override
public void beforeStep(StepExecution stepExecution) {
JobParameters jobParameters = stepExecution.getJobParameters();
if (jobParameters != null) {
List<Object> args = new ArrayList<Object>();
for (JobParameter jobParameter : jobParameters.getParameters().values()) {
args.add(jobParameter.getValue());
}
Object[] arrayArgs = args.toArray(new Object[args.size()]);
String sql = String.format(getSql(), arrayArgs);
setSql(sql);
}
}
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
这个想法是我通过JobParameters将sql参数传递给对象,并使用String.format来填充动态变化的sql。
我在整个服务器上使用基于Java的配置。我的ItemReader实例的bean如下所示:
@Bean
@StepScope
public ItemReader<MyInputObject> myInputObjectItemReader() {
ParameterSettingJdbcCursorItemReader itemReader = new ParameterSettingJdbcCursorItemReader();
itemReader.setDataSource(myDataSource());
itemReader.setSql("SELECT * FROM my_table …Run Code Online (Sandbox Code Playgroud)