gpt4 book ai didi

java - Spring Batch 多次插入一次读取

转载 作者:行者123 更新时间:2023-12-01 20:57:16 25 4
gpt4 key购买 nike

我有一个 Spring Batch 进程,可以从 CSV 读取报表对象并将分析对象正确插入到 MySQL 数据库中,但对于读取的每个报表,逻辑已更改为多个分析插入。

我是 Spring Batch 的新手,实际上这个过程对我来说非常困难,我不知道如何进行此更改。

我没有XML配置,都是用注释。报告和分析类有两个字段(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?谢谢。

最佳答案

如果我正确理解您的问题,您可以使用 CompositeItemWriter 来包装多个 JdbcBatchItemWriter 实例(每个插入需要完成一个实例)。这将允许您为每个项目插入多行。否则,您需要编写自己的 ItemWriter 实现。

关于java - Spring Batch 多次插入一次读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42142787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com