【问题标题】:Spring Batch - Comma separated values - Save in Data BaseSpring Batch - 逗号分隔值 - 保存在数据库中
【发布时间】:2017-06-06 21:01:47
【问题描述】:

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

111、222、333、444、555、777…………

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

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

有没有办法将单行中的所有逗号分隔值标记化并将它们全部保存到数据库中?

查询如下。 INSERT INTO users (id) VALUES (: userid)。

我使用以下代码解析文件并将其保存在数据库中。

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();
    }

【问题讨论】:

    标签: spring-batch


    【解决方案1】:

    基本上,目标对象有两个分隔符 - 逗号和换行符。因此,要么您编写一个适用于两个分隔符的自定义阅读器,要么您需要预处理您的文件以将其转换为标准格式。

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

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

    您可以将其作为一个单独的春季批处理步骤(由于文件大小不推荐)或者如果它可能是一个预定的作业,那么可能,在您的启动脚本中。

    Replace comma with newline in java

    How to break lines at a specific character in Notepad++?

    Notepad++ find and replace string with a new-line

    Replace comma with new line in a text file using tr in Linux

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-18
      • 2018-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-07
      • 1970-01-01
      • 2016-11-12
      相关资源
      最近更新 更多