[英]spring batch custom jdbc itemreader
我想创建一个自定义 jdbc itemreader 我找到了这个解决方案
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.database.JdbcCursorItemReader;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import javax.sql.DataSource;
@Configuration
public class DatabaseToXmlFileJobConfig {
private static final String QUERY_FIND_STUDENTS =
"SELECT " +
"email_address, " +
"name, " +
"purchased_package " +
"FROM STUDENTS " +
"ORDER BY email_address ASC";
@Bean
ItemReader<StudentDTO> databaseXmlItemReader(DataSource dataSource) {
JdbcCursorItemReader<StudentDTO> databaseReader = new
JdbcCursorItemReader<>();
databaseReader.setDataSource(dataSource);
databaseReader.setSql(QUERY_FIND_STUDENTS);
databaseReader.setRowMapper(new BeanPropertyRowMapper<>
(StudentDTO.class));
return databaseReader;
}
}
但我不知道如何使用它来创建我自己的 ItemReader ? 无论如何要在这两个类之间建立联系吗? 或者无论如何创建一个自定义的JDBC阅读器?
public class DatabaseReader implements ItemReader<StudentDTO> {
@Override
public StudentDTO read() throws Exception, UnexpectedInputException,
ParseException, NonTransientResourceException {
return null;
}
}
在 Spring 批处理中,一个步骤有 3 个核心元素
Spring Batch 已经为最常见的情况提供了一组reader 和 writer ,如果你没有特殊场景,你可以直接使用它们
从我在你的问题中看到的,你可以按原样使用它。
工作
@Bean
public Job jobTest(){
JobParametersBuilder parametersBuilder = new JobParametersBuilder();
Instant timestamp =LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant();
return jobBuilder.get("myJobName")
.next(StudentsReport())
.next(sendReportByEmail())
.incrementer( jobParameters -> parametersBuilder.addJobParameters(jobParameters)
.addDate("timeStamp"
, Date.from( timestamp)
).toJobParameters()
)
.build();
}
步骤定义
@Bean
public Step studentsReport(){
return stepBuilder.get("getStudentsThatSomething")
.<User,User>chunk(100)
.reader(studentsJdbcReader())
.writer(studentsXMLWriter())
.build();
}
JDBC 读取器 Bean
@Autowired
DataSource dataSource;
private static final String QUERY_FIND_STUDENTS =
"SELECT " +
"email_address, " +
"name, " +
"purchased_package " +
"FROM STUDENTS " +
"ORDER BY email_address ASC";
@Bean
@StepScope
JdbcCursorItemReader<StudentDTO> studentsJdbcReader() {
JdbcCursorItemReader<StudentDTO> databaseReader = new
JdbcCursorItemReader<>();
databaseReader.setDataSource(dataSource);
databaseReader.setSql(QUERY_FIND_STUDENTS);
databaseReader.setRowMapper(new BeanPropertyRowMapper<>
(StudentDTO.class));
return databaseReader;
}
作家豆
@Bean
@StepScope
public ItemWriter<StudentDTO> studentFlatWriter(){
return new StudentXmlWriter(OUTPUT_FILE);
}
要创建自定义 XML 编写器类,您可以查看 Alexey Saenko 在他的Spring Batch 教程中提供的示例,实际上本教程将为您了解 Spring Batch 打下良好的基础。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.