访问 FlatFileFooterCallback 中的 stepExecution

Access to stepExecution inside FlatFileFooterCallback

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

FlatFileFooterCallback

public class 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");

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

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");
}