我有一个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()) };
}
}
我的FlatFileItemWriter回调有一个奇怪的问题。我有一个自定义ItemWriter实现FlatFileFolterCallback和FlatFileHeaderCallback。因此,我在我的FlatFileItemWriter中设置页眉和页脚回调如下: ItemWriter Bean FlatFileItemWriter Bean 步进豆 我的writeFooter、writeHe
在Spring批处理作业中,我将项目写入目标文件(使用FlatFileItemWriter),并将输入记录“process indicator”字段更新为“processed”/“failed”(使用JdbcBatchItemWriter)。在“物品交易”中实现这一点的最佳方式是什么? 使用CompositeItemWriter(委托FlatFileItemWriter写入文件,委托JdbcBat
我有一个简单的Spring批处理作业,包含几个步骤,最后一步是编写报表,所以我有ItemReader、ItemProcessor和ItemWriter。ItemWriter按块编写取决于步骤中定义的块数,但我需要等到获得所有项后再编写最终报告。我怎么能那样做?
我有一个包含Reader->Processor->Writer的spring批处理。 B/W传递的数据类型为: 在中从CSV文件读取一个简单的批处理数据时,中的一些处理&输出CSV文件由编写。 请建议。如果你认为任何其他方法会更好,请建议。 谢谢
所以,我使用FlatFileItemWriter从数据库中成功读取的数据中编写csv文件。 我正在努力编写一个整数(即行计数器)对应于我正在写入文件的行。似乎是一件容易的事情,但很简单,我被难住了。 一切正常(从数据库读取的数据生成文件)。但我似乎不知道如何实现getCount()方法,从而获得相应行的计数。我认为这与利用ChunkContext有关,但我似乎无法理解。 因此,在我的作业配置中,我
我刚开始使用Spring批处理,我有一个特殊问题。我希望使用从3个不同的jpa查询中获取结果,并分别处理它们,然后使用将它们写入一个统一的XML文件。 对于eg,生成的XML看起来像是,