Spring Batch 注释没有 XML 将参数传递给 Item Readere

问题描述 投票:0回答:1

我创建了一个简单的 Boot/Spring Batch 3.0.8.RELEASE 作业。我创建了一个简单的类,它实现了 JobParametersIncrementer 来访问数据库,查找查询应该查找多少天并将其放入 JobParameters 对象中。

我需要在 JdbcCursorItemReader 中使用该值,因为它根据查找到的 JobParameters 之一选择数据,但我无法通过 Java 注释弄清楚这一点。 XML 示例很多,但 Java 示例不多。

下面是我运行作业的 BatchConfiguration 类。

`

@Autowired
SendJobParms jobParms; // this guy queries DB and puts data into JobParameters

@Bean
public Job job(@Qualifier("step1") Step step1, @Qualifier("step2") Step step2) {
    return jobs.get("DW_Send").incrementer(jobParms).start(step1).next(step2).build();
}

@Bean
protected Step step2(ItemReader<McsendRequest> reader,
                     ItemWriter<McsendRequest> writer) {
    return steps.get("step2")
            .<McsendRequest, McsendRequest> chunk(5000)
            .reader(reader)
            .writer(writer)
            .build();
}


@Bean
public JdbcCursorItemReader reader() {
    JdbcCursorItemReader<McsendRequest> itemReader = new JdbcCursorItemReader<McsendRequest>();
    itemReader.setDataSource(dataSource);

// want to get access to JobParameter here so I can pull values out for my sql query.
    itemReader.setSql("select xxxx where rownum <= JobParameter.getCount()");
    itemReader.setRowMapper(new McsendRequestMapper());
    return itemReader;
}

`

spring spring-boot spring-batch
1个回答
2
投票

按如下方式更改阅读器定义(示例为类型

Long
和名称
paramCount
的参数):

@Bean
@StepScope
public JdbcCursorItemReader reader(@Value("#{jobParameters[paramCount]}") Long paramCount) {
    JdbcCursorItemReader<McsendRequest> itemReader = new JdbcCursorItemReader<McsendRequest>();

    itemReader.setDataSource(dataSource);

    itemReader.setSql("select xxxx where rownum <= ?");

    ListPreparedStatementSetter listPreparedStatementSetter = new ListPreparedStatementSetter();
    listPreparedStatementSetter.setParameters(Arrays.asList(paramCount));
    itemReader.setPreparedStatementSetter(listPreparedStatementSetter);

    itemReader.setRowMapper(new McsendRequestMapper());
    return itemReader;
}
© www.soinside.com 2019 - 2024. All rights reserved.