问题描述
我已经开发了Spring Batch应用程序,它将从数据库中读取数据并写入CSV文件。我正在使用面向块的处理弹簧批处理。
FileStart,60 // 60 - is count of volumes which will calculated from below details
StateRecordStart1 // 1 - is count in this file to differentiate the states.
Alabama,Adamsville,5 // State,City,Volume
Alabama,Addison,3
Alabama,Akron,2
StateRecordEnd1
StateRecordStart2
California,Adelanto,10
California,Agoura Hills,15
California,Alameda,25
California,Albany,5
StateRecordEnd2
FileEnd
Alabama,2
California,5
工作:
@Bean
public Job exportUserJob() {
return jobBuilderFactory.get("exportUserJob").incrementer(new RunIdIncrementer()).flow(step1()).end().build();
}
步骤:
@Bean
public Step step1() {
return stepBuilderFactory.get("step1").<User,User>chunk(10).reader(reader()).processor(processor())
.writer(writer()).build();
}
阅读器:
@Bean
public JdbcCursorItemReader<User> reader() {
JdbcCursorItemReader<User> reader = new JdbcCursorItemReader<User>();
reader.setDataSource(dataSource);
reader.setsql("SELECT state,city,volume FROM user");
reader.setRowMapper(new UserRowMapper());
return reader;
}
public class UserRowMapper implements RowMapper<User> {
@Override
public User mapRow(ResultSet rs,int rowNum) throws sqlException {
User user = new User();
user.setId(rs.getInt("state"));
user.setName(rs.getString("city"));
user.setName(rs.getString("volume"));
return user;
}
}
处理器:
@Bean
public Useritemprocessor processor() {
return new Useritemprocessor();
}
public class Useritemprocessor implements itemprocessor<User,User> {
@Override
public User process(User user) throws Exception {
return user;
}
}
作家:
@Bean
public FileIW<User> writer() {
FileIW<User> writer = new FileIW<User>();
writer.setResource(new ClassPathResource("user.csv"));
writer.setLineAggregator(new DelimitedLineAggregator<User>() {
{
setDelimiter(",");
setFieldExtractor(new BeanWrapperFieldExtractor<User>() {
{
setNames(new String[] { "state","city","volume" });
}
});
}
});
return writer;
}
public class FileIW<T> extends FlatFileItemWriter<T> {
@Override
public String doWrite(List<? extends T> items) {
StringBuilder lines = new StringBuilder();
for (T item : items) {
User user = (User)item;
System.out.println(user.getId());
lines.append(this.lineAggregator.aggregate(item)).append(this.lineseparator);
}
return lines.toString();
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)