spring - FlatFileItemWriterBuilder-headerCallback() 获取写入的行数
问题描述
是否有可能获得写入的总行数FlatFileItemWriter.headerCallback()
?
我是一个 spring-batch nubee,我研究了将行数放入平面文件和Spring Batch - Counting Processed Rows的标题中。但是,我似乎无法使用那里给出的建议来实现逻辑。有意义的是,作者计数仅在文件处理后才可用。但是,我试图在文件正式写入之前获取行数。
我试图寻找一个像钩子一样的钩子@AfterStep
并抓住总行,但我一直在绕圈子。
@Bean
@StepScope
public FlatFileItemWriter<MyFile> generateMyFileWriter(Long jobId,Date eventDate) {
String filePath = "C:\MYFILE\COMPLETED";
Resource file = new FileSystemResource(filePath);
DelimitedLineAggregator<MyFile> myFileLineAggregator = new DelimitedLineAggregator<>();
myFileLineAggregator.setDelimiter(",");
myFileLineAggregator.setFieldExtractor(getMyFileFieldExtractor());
return new FlatFileItemWriterBuilder<MyFile>()
.name("my-file-writer")
.resource(file)
.headerCallback(new MyFileHeaderWriter(file.getFilename()))
.lineAggregator(myFileLineAggregator)
.build();
}
private FieldExtractor<MyFile> getMyFileFieldExtractor() {
final String[] fieldNames = new String[]{
"typeRecord",
"idSystem"
};
return item -> {
BeanWrapperFieldExtractor<MyFile> extractor = new BeanWrapperFieldExtractor<>();
extractor.setNames(fieldNames);
return extractor.extract(item);
};
}
请注意,我在(上)中使用MyFileHeaderWriter.java
类(下headerCallback(new MyFileHeaderWriter(file.getFilename()))
)。我正在尝试初始化qtyRecordsCreated
下面的值。
class MyFileHeaderWriter implements FlatFileHeaderCallback {
private final String header;
private String dtxCreated;
private String tmxCreated;
private String fileName;//15 byte file name private String qtyRecordsCreated;//number of rows in file including the header row
MyFileHeaderWriter(String sbfFileName) {
SimpleDateFormat dateCreated = new SimpleDateFormat("YYDDD");
SimpleDateFormat timeCreated = new SimpleDateFormat("HHMM");
Date now = new Date();
this.dtxCreated = dateCreated.format(now);
this.tmxCreated = timeCreated.format(now);
this.fileName = sbfFileName; this.qtyRecordsCreated="";
String[] headerValues = {dtxCreated,tmxCreated,fileName,qtyRecordsCreated};
this.header = String.join(",", headerValues);
}
@Override
public void writeHeader(Writer writer) throws IOException {
writer.write(header);
}
}
如何获取标题行中的行数?可以FlatFileFooterCallback
用来获取行数,然后用文件中的行数更新标题吗?
解决方案
你可以做到这一点ItemProcessor
,试试这个对我有用
public class EmployeeProcessor implements ItemProcessor<Employee, Employee> {
@Override
public Employee process(Employee employee) throws Exception {
return employee;
}
@AfterStep
public void afterStep(StepExecution stepExecution) {
ExecutionContext stepContext = stepExecution.getExecutionContext();
stepContext.put("count", stepExecution.getReadCount());
System.out.println("COUNT" + stepExecution.getReadCount());
}
}
在你作家中获得价值
int count = stepContext.getInt("count");
希望对你有用
推荐阅读
- .net - 自定义 OpenFileDialog 以浏览文件夹但也显示文件
- javascript - 在多选中获取当前选项
- java - 使用 OkHttp 的 Android Oauth 1.0 身份验证
- android - Kotlin 注释 - 要求参数是来自特定类的常量变量
- python - 如何将包含补丁的 matplotlib 图转换为绘图图?
- java - 在 Spring Security OAuth2 实现中设置成功 OAuth2 身份验证的 cookie
- wpf - 删除 WPF 中菜单列表之间和之后的空格
- flutter - 键盘显示时 Flutter Fexible Widget 不会调整大小
- c# - 如何从 RabbitMQ 上的队列中删除特定消息
- r - 如何按字符串值的频率对数据进行排序?