0

我正在创建一个固定长度的文件,我必须将读入的文件数量附加到页脚。我需要访问 stepExecution 以获取写入计数,我遵循了这个FlatFileFooterCallback - how to get access to StepExecution For Count。StepExecution 为空??

FlatFileFooterCallback

公共类 LexisNexisRequestFileFooter 实现 FlatFileFooterCallback {

@Value("#{StepExecution}")
private StepExecution stepExecution;
int totalItemsWritten = 0;

@Override
public void writeFooter(Writer writer) throws IOException {
    System.out.println(stepExecution.getWriteCount());
    String julianDate = createJulianDate();
    String SAT = "##!!SAT#"+julianDate+totalItemsWritten+"                                                                                                                                                                                                                       \r\n";
    String SIT = "##!!SIT#"+julianDate+totalItemsWritten+"                                                                                                                                                                                                                           \r\n";
    String footer = SAT+SIT;
    writer.write(footer);

}

}

配置文件

@Bean
@StepScope
public FlatFileFooterCallback customFooterCallback() {
    return new LexisNexisRequestFileFooter();
}

写入器文件

    // Create writer instance
    FlatFileItemWriter<LexisNexisRequestRecord> writer = new FlatFileItemWriter<>();

    LexisNexisRequestFileFooter lexisNexisRequestFileFooter = new LexisNexisRequestFileFooter();

    writer.setFooterCallback(lexisNexisRequestFileFooter);

    // Set output file location
    writer.setResource(new FileSystemResource("homeData.txt"));

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

    writer.setEncoding("ascii");
4

1 回答 1

0

在您的编写器配置中,您在此处手动创建页脚回调:

LexisNexisRequestFileFooter lexisNexisRequestFileFooter = new LexisNexisRequestFileFooter();
writer.setFooterCallback(lexisNexisRequestFileFooter);

并且不注入步骤范围的bean。您的项目编写器 bean 定义方法应类似于:

@Bean
public FlatFileItemWriter writer() {

   // Create writer instance
   FlatFileItemWriter<LexisNexisRequestRecord> writer = new FlatFileItemWriter<>();

   writer.setFooterCallback(customFooterCallback());

   // Set output file location
   writer.setResource(new FileSystemResource("homeData.txt"));

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

   writer.setEncoding("ascii");
}
于 2019-12-19T20:25:43.453 回答