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;
}
这是我写的代码。我无法理解从哪里开始。
在这方面需要帮助。