Получение ошибки, как это - «jobParameters не может быть найден на объекте типа BeanExpressionContext» - PullRequest
0 голосов
/ 22 сентября 2019

Мы создаем приложение 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();
}

1 Ответ

0 голосов
/ 23 сентября 2019

Пожалуйста, дайте мне знать, что я делаю неправильно в конфигурации бина ниже.

Ваш jdbcDataReader(@Value() String param) неверен.Вам необходимо указать выражение Spel в @Value, чтобы указать, какой параметр вводить.Вот пример того, как передать параметр задания в JdbcCursorItemReader:

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

Более подробную информацию можно найти в разделе поздняя привязка справочной документации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...