小编Sam*_*ont的帖子

如何使用基于Java的配置来配置Spring Batch StepScope?

我正在使用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)

java spring spring-batch

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×1

spring ×1

spring-batch ×1