Spring 出现如下错误-“在BeanExpressionContext类型的对象上找不到jobParameters”

Spring 出现如下错误-“在BeanExpressionContext类型的对象上找不到jobParameters”,spring,spring-boot,spring-batch,Spring,Spring Boot,Spring Batch,我们正在创建一个spring批处理应用程序,它从一个数据库读取数据并写入另一个数据库。在这个过程中,我们需要动态地将参数设置为SQL,因为我们有相应地需要数据的参数 为此,我们创建了一个带有@StepScope的JdbcCursorItemReader阅读器,正如我在其他文章和教程中发现的那样。但是没有成功。我们工作中的区块读取器实际上使用了可查看读取器,它在内部使用JdbcCursorItemReader对象来执行实际的读取操作 当作业被触发时,我们得到一个错误-在BeanExpression

我们正在创建一个spring批处理应用程序,它从一个数据库读取数据并写入另一个数据库。在这个过程中,我们需要动态地将参数设置为SQL,因为我们有相应地需要数据的参数

为此,我们创建了一个带有@StepScope的JdbcCursorItemReader阅读器,正如我在其他文章和教程中发现的那样。但是没有成功。我们工作中的区块读取器实际上使用了可查看读取器,它在内部使用JdbcCursorItemReader对象来执行实际的读取操作

当作业被触发时,我们得到一个错误-在BeanExpressionContext类型的对象上找不到jobParameters

请让我知道我在下面的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();
}
请让我知道我在下面的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();
}
你的jdbcDataReader@Value字符串参数不正确。您需要在@Value中指定一个Spel表达式来指定要注入的参数。以下是如何将作业参数传递给JdbcCursorItemReader的示例:

您可以在参考文档的一节中找到更多详细信息