Я новичок в Spring Batch и пытаюсь получить некоторые знания об этом. Я написал следующий метод для чтения данных из таблицы, но получаю исключение, говорящее: «Должен быть предоставлен SQL-запрос», хотя я предоставил запрос в методе.
@Configuration
public class ReadingObjectItemReader extends JdbcCursorItemReader<Person> {
public DataSource getDataSource() { return dataSource; }
@Resource
public void setDataSource(DataSource dataSource) { super.setDataSource(dataSource); }
@Autowired
DataSource dataSource;
@Bean
public JdbcCursorItemReader<DimInstitutionalClaim> cursorReader() {
JdbcCursorItemReader<Person> databaseReader = new JdbcCursorItemReader<>();
databaseReader.setDataSource(dataSource);
databaseReader.setSql("select TOP(10) * from dbo.Person ");
databaseReader.setFetchSize(5);
databaseReader.setRowMapper(new BeanPropertyRowMapper<>(Person.class));
return databaseReader;
}
}
и на шаге я называю это так:
@Autowired
ReadingObjectItemReader readingObject;
@Bean
public Step step1() {
return stepBuilderFactory.get("step1").<Person,Person>chunk(2).reader(readingObject.cursorReader())
.writer(itemWriter()).listener(promotionListener()).build();
}
при запуске приведенного выше кода на моем шаге InputReader я получаю
Caused by: java.lang.IllegalArgumentException: The SQL query must be provided
Если я пишу приведенную выше логику в том же классе, где определены мои конструкторы заданий и шаги, и без расширения JdbcCursorItemReader, как мой код ниже, он работает нормально.
@Bean
public Step step1() {
return stepBuilderFactory.get("step1").<Person, Person>chunk(2).reader(itemReader())
.writer(itemWriter()).listener(promotionListener()).build();
}
@Bean
public ItemReader<Person> itemReader() {
JdbcCursorItemReader<Person> databaseReader = new JdbcCursorItemReader<>();
databaseReader.setDataSource(dataSource);
databaseReader.setSql("select TOP(10) * from dbo.Person ");
databaseReader.setFetchSize(5);
databaseReader.setRowMapper(new BeanPropertyRowMapper<>(Person.class));
return databaseReader;
}
Может ли кто-нибудь предложить мне, что не так с моей реализацией при ее определении в новом классе и расширении с помощью JdbcCursorItemReader, а также есть ли какой-либо другой способ, которым я могу использовать запросы JPA, такие как findAll() и JPQL на InputReader, кроме PaginationReaders?
JdbcCursorItemReader
, как настроить его на шаг? - person Ken Chan   schedule 06.06.2020