繁体   English   中英

Spring 批处理 FlatFileItemWriter - 写入后在 csv 中显示指数值

[英]Spring batch FlatFileItemWriter - Showing exponential value in csv after writing it

我有一个 Spring 批处理应用程序,它从 mysql 数据库读取数据并将其写入 csv 文件。

问题:当我看到 csv 中的数据时遇到的问题,一些大数字显示为指数值。 例如,对于这个数字“4491611100277480” ,它显示为“4.49161E+15”

下面是我正在使用的代码片段

// Job
@Bean
public Job databaseToCsvJob() {
    return jobBuilderFactory.get("databaseToCsvJob").incrementer(new RunIdIncrementer())
            // .listener(listener)
            .start(databaseToCsvJob_step()).build();
}

// Step
@Bean
public Step databaseToCsvJob_step() {
    return stepBuilderFactory.get("databaseToCsvJob_step").<Person, Person>chunk(1000).reader(personReader())
            .writer(personWriter()).build();
}

// Reader
@Bean
public JdbcCursorItemReader<Person> personReader() {
    JdbcCursorItemReader<Person> reader = new JdbcCursorItemReader<>();
    reader.setSql("select empCode , empName , profileName, ID from profile");
    reader.setDataSource(mysqlDataSource);
    reader.setRowMapper(personRowmapper());
    return reader;
}

// Writer
@Bean
public FlatFileItemWriter<Person> personWriter() {
    // Create writer instance
    FlatFileItemWriter<Person> writer = new FlatFileItemWriter<>();

    // Set output file location
    writer.setResource(new FileSystemResource("src/main/resources/people-data.csv"));

    // All job repetitions should "append" to same output file
    writer.setAppendAllowed(true);

    // Name field values sequence based on object properties
    writer.setLineAggregator(new DelimitedLineAggregator<Person>() {
        {
            setDelimiter(",");
            setFieldExtractor(new BeanWrapperFieldExtractor<Person>() {
                {
                    setNames(new String[] { "empCode", "empName", "profileName", "id" });
                }
            });
        }
    });
    return writer;
}

当您使用 double 作为数据类型时会发生这种情况。 将其更改为 long ,它应该可以正常工作。

如果由于某种原因它必须保持双倍,您可以在提取过程中转换该值:

new BeanWrapperFieldExtractor<Person>() {
  {
    setNames(new String[] { "empCode", "empName", "profileName", "id" });
  }
  public Object[] extract(Person person) {
    return new Object[] { person.getEmpCode(), person.getEmpName(), person.getProfileName(), ((long) person.getId()) };
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM