Spring batch 将最后 n 个值从 csv 存储到数据库中的最后一列

问题描述 投票:0回答:0

Full Name,Dob,Gender,Role id 这些是我的列,这里的扭曲是列名称“Role id”可以有多个逗号分隔值。我试图在列 Gender 之后存储所有 n 个值到角色 ID。 列大小是固定的,即 4。假设第一个 CSV 文件行包含 10 个逗号分隔值,那么前 3 个值应映射到前 3 列,其余 7 个值应保存在最后一列(角色 ID)中。 例如 全名,Dob,性别,家庭分支 Akshay,31-12-99,m,1,2,3,4,5,6,7 m 之后的值应该保存在 Role id

@Bean
@StepScope
public FlatFileItemReader<Customer> itemReader(@Value("#{jobParameters[fullPathFileName]}") String pathToFIle) {
    FlatFileItemReader<Customer> flatFileItemReader = new FlatFileItemReader<>();
    flatFileItemReader.setResource(new FileSystemResource(new File(pathToFIle)));
    flatFileItemReader.setName("CSV-Reader");
    flatFileItemReader.setLinesToSkip(1);
    flatFileItemReader.open(new ExecutionContext());
    flatFileItemReader.setLineMapper(lineMapper());

    return flatFileItemReader;
}

@Bean
public LineMapper<Customer> lineMapper() {
    DefaultLineMapper<Customer> lineMapper = new DefaultLineMapper<>();
    DelimitedLineTokenizer delimiter = new DelimitedLineTokenizer();

    delimiter.setDelimiter(",");
    delimiter.setStrict(false);
    delimiter.setNames("full_name", "dob", "gender", "role id");
    BeanWrapperFieldSetMapper<Customer> mapper = new BeanWrapperFieldSetMapper<Customer>();
    mapper.setTargetType(Customer.class);
    lineMapper.setFieldSetMapper(mapper);
    lineMapper.setLineTokenizer(delimiter);

    return lineMapper;
}
@Bean
public DataProcessor dataProcessor() {
    return new DataProcessor();
}

@Bean
public RepositoryItemWriter<Customer> itemWritter() {
    RepositoryItemWriter<Customer> writter = new RepositoryItemWriter<>();
    writter.setRepository(customerRepository);
    writter.setMethodName("save");
    return writter;
}

@Bean
public Step step1(FlatFileItemReader<Customer> itemReader) {
    return stepBuilderFactory.get("slaveStep").<Customer, Customer>chunk(10).reader(itemReader)
            .processor(dataProcessor()).writer(itemWritter()).faultTolerant().listener(skipListener())
            .skipPolicy(skipPolicy()).taskExecutor(taskExecutor()).build();
}

@Bean
public Job runJob(FlatFileItemReader<Customer> itemReader) {
    return jobBuilderFactory.get("importCustomers").flow(step1(itemReader)).end().build();

}

@Bean
public SkipPolicy skipPolicy() {
    return new ExceptionSkipPolicy();
}

@Bean
public SkipListener skipListener() {
    return new StepSkipListener();
}

@Bean
public TaskExecutor taskExecutor() {
    SimpleAsyncTaskExecutor taskExecutor = new SimpleAsyncTaskExecutor();
    taskExecutor.setConcurrencyLimit(10);
    return taskExecutor;
}

这是我写的代码。我无法理解从哪里开始。

在这方面需要帮助。

mysql spring-boot spring-batch batch-processing
© www.soinside.com 2019 - 2024. All rights reserved.