arthas3000 2018-11-18 12:20 采纳率: 0%
浏览 1387

spring batch插入多张表/不同表

最近在自学spring batch,如果writer里是要插入多张表/不同表(根据前面processor中数据的不同状态),该怎么处理呢?
我在网上找了不少资料,貌似都是简单的插入单张表的demo,有没有大神指点一二

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-07 08:15
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    Spring Batch可以支持对多个表进行批量插入操作。以下是一个示例,展示了如何使用Spring Batch将数据从一个表插入到另一个表:

    import org.springframework.batch.core.Job;
    import org.springframework.batch.core.Step;
    import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
    import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
    import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
    import org.springframework.batch.item.ItemProcessor;
    import org.springframework.batch.item.ItemReader;
    import org.springframework.batch.item.ItemWriter;
    import org.springframework.batch.item.database.JdbcPagingItemReader;
    import org.springframework.batch.item.database.JdbcPagingItemWriter;
    import org.springframework.batch.item.database.support.SqlPagingResultsHandler;
    import org.springframework.batch.item.file.FlatFileItemReader;
    import org.springframework.batch.item.file.builder.FlatFileItemReaderBuilder;
    import org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper;
    import org.springframework.batch.item.file.transform.DelimitedLineAggregator;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    @EnableBatchProcessing
    public class MyJob {
    
        private final JobBuilderFactory jobBuilderFactory;
        private final StepBuilderFactory stepBuilderFactory;
    
        @Autowired
        public MyJob(JobBuilderFactory jobBuilderFactory, StepBuilderFactory stepBuilderFactory) {
            this.jobBuilderFactory = jobBuilderFactory;
            this.stepBuilderFactory = stepBuilderFactory;
        }
    
        public void executeMyJob() throws Exception {
            // 定义任务步骤
            Step myStep = stepBuilderFactory.get("myStep")
                .<String, String>chunk(50)
                .reader(myReader())
                .writer(myWriter())
                .build();
    
            // 定义主任务
            Job myJob = jobBuilderFactory.get("myJob")
                .start(myStep)
                .build();
            myJob.execute().get();
    
            System.out.println("MyJob executed successfully.");
        }
    
        private ItemReader<String> myReader() {
            FlatFileItemReader<String> itemReader = new FlatFileItemReaderBuilder()
                .name("itemReader")
                .type(String.class)
                .resource(new ClassPathResource("/data.csv"))
                .deliminator(",")
                .fieldSetMapper(new BeanWrapperFieldSetMapper<>())
                .build();
    
            return itemReader;
        }
    
        private ItemWriter<String> myWriter() {
            JdbcPagingItemWriter<String> itemWriter = new JdbcPagingItemWriter<>();
            SqlPagingResultsHandler resultsHandler = new SqlPagingResultsHandler(itemWriter);
            itemWriter.setResultsHandler(resultsHandler);
    
            return itemWriter;
        }
    }
    

    在这个例子中,我们定义了一个名为myStep的任务步骤,它首先读取CSV文件,并将其转换为String类型的数据;然后,它写入另一个名为myWriter的事务步骤,这个步骤使用JDBC来执行插入操作。

    注意:你需要根据你的实际需求修改myReader()myWriter()方法中的代码,以匹配你使用的数据库驱动、表名等信息。

    评论

报告相同问题?