当前位置: 首页 > 知识库问答 >
问题:

获得如下错误-“在BeanExpressionContext类型的对象上找不到JobParameters”

杜经艺
2023-03-14

请让我知道我在下面的bean配置中做错了什么。

@Bean
@StepScope
@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS)
public JdbcCursorItemReader<DTO> jdbcDataReader(@Value() String param) throws Exception {

JdbcCursorItemReader<DTO> databaseReader = new JdbcCursorItemReader<DTO>();

return databaseReader;
}

// This class extends PeekableReader, and sets JdbcReader (jdbcDataReader) as delegate
@Bean
public DataPeekReader getPeekReader() {
DataPeekReader peekReader = new DataPeekReader();
return peekReader;
}

// This is the reader that uses Peekable Item Reader (getPeekReader) and also specifies chunk completion policy.
@Bean
public DataReader getDataReader() {
DataReader dataReader = new DataReader();
return dataReader;
}


// This is the step builder.
@Bean
public Step readDataStep() throws Exception {
return stepBuilderFactory.get("readDataStep")
.<DTO, DTO>chunk(getDataReader())
.reader(getDataReader())
.writer(getWriter())
.build();
}

@Bean
public Job readReconDataJob() throws Exception {
return jobBuilderFactory.get("readDataJob")
.incrementer(new RunIdIncrementer())
.flow(readDataStep())
.end()
.build();
}

共有1个答案

狄玉书
2023-03-14

请让我知道我在下面的bean配置中做错了什么。

您的jdbcdatareader(@value()String param)不正确。您需要在@value中指定一个Spel表达式,以指定注入哪个参数。下面是如何将作业参数传递给JDBCCursorItemReader的示例:

@Bean
@StepScope
public JdbcCursorItemReader<DTO> jdbcCursorItemReader(@Value("#{jobParameters['table']}") String table) {
    return new JdbcCursorItemReaderBuilder<DTO>()
            .sql("select * from " + table)
            // set other properties
            .build();
}

您可以在参考文档的“后期绑定”部分找到更多详细信息。

 类似资料: