【发布时间】:2017-02-09 17:09:29
【问题描述】:
我有一个 Spring Batch 进程,它从 CSV 读取报告对象并将分析对象正确插入到 MySQL 数据库中,但是对于每个读取的报告,逻辑已经更改为多个分析插入。
我是 Spring Batch 的新手,实际过程对我来说非常困难,我不知道如何进行此更改。
我没有XML配置,都是带注释的。 Report 和 Analytics 类对 adId 和 value 这两个字段有一个 getter 和一个 setter。新逻辑有七个 adId 值,我需要在表中插入七行。
我隐藏、删除或隐藏了一些对问题没有贡献的代码。
这是我的 BatchConfiguration.java:
@Configuration
@EnableBatchProcessingpublic
class BatchConfiguration {
@Autowired
private transient JobBuilderFactory jobBuilderFactory;
@Autowired
private transient StepBuilderFactory stepBuilderFactory;
@Autowired
private transient DataSource dataSource;
public FlatFileItemReader<Report> reader() {
// The reader from the CSV works fine.
}
@Bean
public JdbcBatchItemWriter<Analytic> writer() {
final JdbcBatchItemWriter<Analytic> writer = new JdbcBatchItemWriter<Analytic>();
writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<Analytic>());
writer.setSql("INSERT INTO TABLE (ad_id, value) VALUES (:adId, :value)");
writer.setDataSource(dataSource);
return writer;
}
@Bean
public AnalyticItemProcessor processor() {
return new AnalyticItemProcessor();
}
@Bean
public Step step() {
return stepBuilderFactory.get("step1").<Report, Analytic> chunk(10000).reader(reader()).processor(processor()).writer(writer()).build();
}
@Bean
public Job process() {
final JobBuilder jobBuilder = jobBuilderFactory.get("process");
return jobBuilder.start(step()).build();
}
}
然后是 AnalyticItemProcessor.java
public class AnalyticItemProcessor implements ItemProcessor<Report, Analytic> {
@Override
public Analytic process(final Report report) {
// Creates a new Analytic call BeanUtils.copyProperties(report, analytic) and returns analytic.
}
}
以及过程:
@SpringBootApplication
public class Process {
public static void main(String[] args) throws Exception {
SpringApplication.run(Process.class, args);
}
}
如何进行此更改?也许使用 ItemPreparedStatementSetter 或 ItemSqlParameterSourceProvider?谢谢。
【问题讨论】:
标签: java spring-batch