java - Spring Boot Batch 写入空文件
问题描述
我不确定为什么这个应用程序没有向文件写入任何内容。我正在读取 MySQL 数据库并写入 CSV 文件。我可以在 ItemProcessor 日志中看到所需的结果集,但它没有在文件中写入任何内容。我的文件位于资源/userinfo.csv 此处。没有错误或异常。花了很多时间来修复它。非常感谢您的帮助。这是我的代码
@Configuration
@EnableBatchProcessing
public class BatchConfiguration {
@Autowired
public JobBuilderFactory jobBuilderFactory;
@Autowired
public StepBuilderFactory stepBuilderFactory;
@Autowired
public DataSource dataSource;
@Bean
public JdbcCursorItemReader<UserInfo> reader(){
JdbcCursorItemReader<UserInfo> reader = new
JdbcCursorItemReader<UserInfo>();
reader.setDataSource(dataSource);
reader.setSql("SELECT first_name,last_name FROM db2.userinfo");
reader.setRowMapper(new UserRowMapper());
return reader;
}
@Bean
public UserInfoItemProcessor processor(){
return new UserInfoItemProcessor();
}
@Bean
public FlatFileItemWriter<UserInfo> writer(){
return new FlatFileItemWriterBuilder<UserInfo>()
.name("writer")
.resource(new ClassPathResource("userinfo.csv"))
.delimited()
.delimiter(",")
.names(new String[] {
"first_name",
"last_name"})
.shouldDeleteIfExists(true)
.build();
}
@Bean
public Step step1() {
return stepBuilderFactory.get("step1").<UserInfo, UserInfo> chunk(10)
.reader(reader())
.processor(processor())
.writer(writer())
.build();
}
@Bean
public Job exportUserJob() {
return jobBuilderFactory.get("exportUserJob")
.incrementer(new RunIdIncrementer())
.flow(step1())
.end()
.build();
}
}
UserRawMapper 类
public class UserRowMapper implements RowMapper<UserInfo> {
@Override
public UserInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
UserInfo userInfo = new UserInfo();
userInfo.setFirst_name(rs.getString("first_name"));
userInfo.setLast_name(rs.getString("last_name"));
System.out.println(">>> USERINFO -> " + userInfo.getFirst_name());
// it prints fine here.....
return userInfo;
}
}
用户信息类
public class UserInfo {
private String first_name;
private String last_name;
public String getFirst_name() {
return first_name;
}
public void setFirst_name(String first_name) {
this.first_name = first_name;
}
public String getLast_name() {
return last_name;
}
public void setLast_name(String last_name) {
this.last_name = last_name;
}
}
UserInfoItemProcessor.class
public class UserInfoItemProcessor implements ItemProcessor<UserInfo, UserInfo>{
@Override
public UserInfo process(UserInfo userInfo) throws Exception {
return userInfo;
}
}
应用程序属性
spring.datasource.url=jdbc:mysql://localhost:3306/db2?useSSL=false
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.schema=classpath:/org/springframework/batch/core/schema-mysql.sql
spring.batch.initialize-schema=always
spring.datasource.initialize=true
解决方案
推荐阅读
- r - 如何使用 R 上的传单在 Lambert 93 中投影光栅+多边形?
- ms-word - 如何在后台视图中将焦点设置在自定义选项卡上
- uikit - 从 UIImage 转换为 SwiftUI Image 会导致相同大小的空白图像
- ffmpeg - 使用 FFMPEG 将 DAV 文件转换为 AVI 失败
- java - 如何传递点击次数并在另一个活动中重置计数?
- flutter - 使用 eachFor 遍历包含地图列表的地图
- hybris - 业务流程自定义属性问题
- ios - 为深色模式更改 UIDatePicker 选定的日期文本颜色(iOS 13)
- html - 如何使用下拉菜单将“位置:绝对”顶部导航居中
- c# - 序列化瓷砖地图