Java Spring batch FlatFileItemWriter-写入后以csv显示指数值

Java Spring batch FlatFileItemWriter-写入后以csv显示指数值,java,spring,spring-boot,spring-batch,Java,Spring,Spring Boot,Spring Batch,我有一个Spring批处理应用程序,它从mysql数据库读取数据并将其写入csv文件 问题: 当我看到csv中的数据时,我面临的问题是,一些大的数字显示为指数值。例如,对于这个数字,'449161100277480'显示为'4.49161E+15“ 下面是我正在使用的代码片段 // Job @Bean public Job databaseToCsvJob() { return jobBuilderFactory.get("databaseToCsvJob").inc

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

问题: 当我看到csv中的数据时,我面临的问题是,一些大的数字显示为指数值。例如,对于这个数字,'449161100277480'显示为'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;
}
//作业
@豆子
公共作业数据库tocsvjob(){
返回jobBuilderFactory.get(“databaseToCsvJob”).incrementer(新的RunIdIncrementer())
//.listener(侦听器)
.start(databaseToCsvJob_step()).build();
}
//台阶
@豆子
公共步骤数据库tocsvjob_Step(){
返回stepBuilderFactory.get(“databaseToCsvJob_step”).chunk(1000).reader(personReader())
.writer(personWriter()).build();
}
//读取器
@豆子
公共JdbcCursorItemReader personReader(){
JdbcCursorItemReader=新的JdbcCursorItemReader();
setSql(“从概要文件中选择empCode、empName、profileName、ID”);
reader.setDataSource(mysqlDataSource);
setRowMapper(personRowmapper());
返回读取器;
}
//作家
@豆子
公共FlatFileItemWriter personWriter(){
//创建编写器实例
FlatFileItemWriter writer=新的FlatFileItemWriter();
//设置输出文件位置
setResource(新文件系统资源(“src/main/resources/people data.csv”);
//所有作业重复都应“附加”到同一输出文件
writer.setAppendAllowed(true);
//基于对象属性的名称字段值序列
writer.setLineAggregator(新的DelimitedLineAggregator(){
{
setDelimiter(“,”);
setFieldExtractor(新BeanWrapperFieldExtractor(){
{
setNames(新字符串[]{“empCode”、“empName”、“profileName”、“id”});
}
});
}
});
返回作者;
}

使用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()) };
  }
}
newbeanwrapperfieldextractor(){
{
setNames(新字符串[]{“empCode”、“empName”、“profileName”、“id”});
}
公共对象[]摘录(个人){
返回新对象[]{person.getEmpCode(),person.getEmpName(),person.getProfileName(),((长)person.getId())};
}
}

使用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()) };
  }
}
newbeanwrapperfieldextractor(){
{
setNames(新字符串[]{“empCode”、“empName”、“profileName”、“id”});
}
公共对象[]摘录(个人){
返回新对象[]{person.getEmpCode(),person.getEmpName(),person.getProfileName(),((长)person.getId())};
}
}

同意此答案。您可以使用相同的方法转换为字符串并进行各种格式设置。同意此答案。您可以使用相同的方法转换为字符串并进行各种格式设置。