CSVからレポートオブジェクトを読み込み、アナリティックオブジェクトをMySQL DBに正しく読み込むSpringバッチプロセスがありますが、レポートごとに複数のアナリティクスインサートの論理が変更されています読んだ。1回の読み込みのためのSpringバッチ複数インサート
私はSpring Batchで新しく、実際にはプロセスが非常に難しく、この変更を行う方法がわかりません。
XML構成はありません。すべて注釈付きです。レポートクラスとアナリティクスクラスには、adIdとvalueという2つのフィールドのゲッターとセッターがあります。新しいロジックにはadIdの7つの値があり、テーブルに7つの行を挿入する必要があります。
質問に寄与しないコードを隠したり、削除したり、抑止したりします。ここで
は私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?ありがとう。
ありがとう@Michael Minella、ItemWriter実装でOKでした。非常に重要なのは、 "writer.afterPropertiesSet();" likeはAvisと言っています。http://stackoverflow.com/questions/32656581/pb-using-jdbcbatchitemwriter-with-compositeitemwriter-in-java-code-spring-batch –
デリゲートのそれぞれをBeanとして設定すると、必要はありません。コンテナはあなたのためにそれを行います。 –