Мы создаем приложение Spring Batch, которое считывает данные из базы данных и записывает в другую базу данных.В этом процессе нам нужно динамически установить параметр в SQL, поскольку у нас есть параметры, которые соответственно требуют данные.
Для этого мы создали JdbcCursorItemReader Reader с @StepScope, как я нашел в других статьях и руководствах.,Но не удалось.Считыватель чанков в нашем Job фактически использует Peekable Reader, который внутренне использует объект JdbcCursorItemReader для выполнения фактической операции чтения.
Когда задание запускается, мы получаем ошибку - "jobParameters не может быть найден для объекта типа BeanExpressionContext"
Пожалуйста, дайте мне знать, что я делаю неправильно в конфигурации бина ниже.
@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();
}