Spring batch Spring批处理-逗号分隔值-保存在数据库中

Spring batch Spring批处理-逗号分隔值-保存在数据库中,spring-batch,Spring Batch,我有一个文件,其中包含由逗号(“,”)分隔的值(用户ID)列表,如下所示 11122233344455777 该文件包含数百万条这样的记录,我想将这些值保存到RDBMS表中的一列中。 我尝试使用DelimitedLineTokenizer解析数据 问题在于,“DelimitedLineTokenizer”只考虑单行中的一个条目,其余的值将被忽略。保存第一个条目(“111”)并忽略同一行中的其余值。如果有第二行,则保存第二行中的第一个元素并忽略其余元素 有没有一种方法可以标记一行中所有逗号分隔的值

我有一个文件,其中包含由逗号(“,”)分隔的值(用户ID)列表,如下所示

11122233344455777

该文件包含数百万条这样的记录,我想将这些值保存到RDBMS表中的一列中。 我尝试使用DelimitedLineTokenizer解析数据

问题在于,“DelimitedLineTokenizer”只考虑单行中的一个条目,其余的值将被忽略。保存第一个条目(“111”)并忽略同一行中的其余值。如果有第二行,则保存第二行中的第一个元素并忽略其余元素

有没有一种方法可以标记一行中所有逗号分隔的值,并将它们保存到DB中

下面是一个查询。 插入用户(id)值(:userid)

我使用以下代码解析文件并将其保存在DB中

public FlatFileItemReader<User> reader() {

    FlatFileItemReader<User> reader = new FlatFileItemReader<User>();
    DelimitedLineTokenizer reader = new DelimitedLineTokenizer(",");
    reader.setNames(new String[] {“userid”});

    blah…blah….blah….

    reader.setLineMapper(new DefaultLineMapper<User>() {
            {

                setLineTokenizer(reader);
                setFieldSetMapper(new BeanWrapperFieldSetMapper<User>() {
                    {
                        setTargetType(User.class);
                    }
                });
            }
        });
        return reader;
    }




 @Bean
    public UserItemProcessor processor() {
              return new UserItemProcessor();
    }

@Bean
public Job importUserJob(JobCompletionNotificationListener listener) {

        return jobBuilderFactory.get("importUserJob").incrementer(new RunIdIncrementer()).listener(listener)
                .flow(step1()).end().build();
    }

    @Bean
    public Step step1() {

        return stepBuilderFactory.get("step1").<User, User> chunk(5).reader(reader()).processor(processor())
                .writer(writer()).build();
    }
公共FlatFileItemReader(){
FlatFileItemReader=新的FlatFileItemReader();
DelimitedLineTokenizer读取器=新的DelimitedLineTokenizer(“,”);
setNames(新字符串[]{“userid”});
等等…等等…等等…。
reader.setLineMapper(新的DefaultLineMapper(){
{
setLineTokenizer(读卡器);
setFieldSetMapper(新的BeanRapperFieldSetMapper(){
{
setTargetType(User.class);
}
});
}
});
返回读取器;
}
@豆子
公共UserItemProcessor处理器(){
返回新的UserItemProcessor();
}
@豆子
公共作业导入器作业(作业完成通知侦听器侦听器){
返回jobBuilderFactory.get(“importUserJob”).incrementer(新的RunIdIncrementer()).listener(listener)
.flow(step1()).end().build();
}
@豆子
公共步骤第1步(){
返回stepBuilderFactory.get(“step1”).chunk(5).reader(reader()).processor(processor())
.writer(writer()).build();
}

基本上,目标对象有两个分隔符-逗号和新行。因此,您要么编写一个同时使用两个分隔符的自定义读取器,要么需要对文件进行预处理,使其成为标准格式

在我看来,您最好对文件进行预处理,用新行字符替换所有逗号

您可以原样保留原始文件,并在新的临时文件中创建预处理的数据

您可以将其作为单独的spring批处理步骤来执行(由于文件大小的原因,不建议这样做),或者如果它将是一个计划的作业,则可能在启动脚本中执行