【发布时间】:2019-09-12 02:42:01
【问题描述】:
我正在探索 Spring 批处理,我有一个问题陈述,需要我从 db 中读取,将这些数据转换为逗号分隔的形式并写入文件。我有大约 50 个不同的查询和尽可能多的文件要创建。这些查询很少会返回大量数据,这可能会使我的文件变大。我正在使用 Spring Batch 解决这个问题,并且一般对 Spring Batch 的查询很少。
- 当我需要转换特定字段值时,是否可以使用字段提取器。
BeanWrapperFieldExtractor<StudentDTO> extractor = new BeanWrapperFieldExtractor<>();
extractor.setNames(new String[] {"name", "emailAddress", "purchasedPackage"});
lineAggregator.setFieldExtractor(extractor);
例如,如果我需要执行类似 studentDto.getName().replace("a","") 的操作。在这种情况下我应该选择定制处理器吗?
- 在这种情况下,一项具有 50 个步骤和并行处理的作业是否适合进行?
- 将标题写入文件顶部而不是使用 FlatFileHeaderCallback - 以下写入文件的方式是否可接受?
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
if (stepExecution.getStatus() == "COMPLETED") {
fileWriter.write("headerString");
Path path = Paths.get("encryptedTextFileThreaded.txt");
try (BufferedWriter fileWriter = Files.newBufferedWriter(path)) {
for(Line line: studentDtoLines)
{
fileWriter.write(line.getLine());
fileWriter.newLine();
}
fileWriter.write("footerString");
}
catch (Exception e) {
log.error("Fatal error: error occurred while writing {} file",path.getFileName());
}
}
- 多线程步骤用于加速单个步骤。如果我有一个包含 50 个步骤的 Job,并且没有一个步骤依赖于另一个,那么可以使用并行处理来加速 Job 的执行。真的?这是否意味着 Spring Batch 可以创建 50 个线程并并行运行所有线程?
【问题讨论】:
标签: java spring spring-batch