我尝试了此处Spring Batch - create a new file each time instead of overriding it for transferring data from CSV to XML中发布的解决方案,但是它不适用于我使用的基于注释的方法。
fileItemWriter.setResource(new FileSystemResource("csv/employees-#{new java.text.SimpleDateFormat("Mddyyyyhhmmss").format(new java.util.GregorianCalendar().getTime())}.csv"));
我的批处理作业计划每1小时运行一次,该批处理作业读取表并将数据写入CSV文件。当数据写入时,我需要完全创建一个新文件。如果文件名是唯一的,那将是很好的选择,所以我一直在寻找根据帖子执行日期的方法。
任何人都可以指导发生什么问题吗?
@Bean(destroyMethod="")
public FlatFileItemWriter<Employees> employeesWriter(){
FlatFileItemWriter<Employees> fileItemWriter = new FlatFileItemWriter<>();
//fileItemWriter.setResource(new FileSystemResource("csv/employees.csv"));
fileItemWriter.setResource(new FileSystemResource("csv/employees-#{new java.text.SimpleDateFormat("Mddyyyyhhmmss").format(new java.util.GregorianCalendar().getTime())}.csv"));
fileItemWriter.setHeaderCallback(headerCallback());
BeanWrapperFieldExtractor<Employees> fieldExtractor = new BeanWrapperFieldExtractor<>();
fieldExtractor.setNames(new String[] {"employeeNumber", "lastName", "firstName", "extension", "email", "officeCode", "reportsTo", "jobTitle"});
DelimitedLineAggregator<Employees> lineAggregator = new DelimitedLineAggregator<>();
lineAggregator.setDelimiter(",");
lineAggregator.setFieldExtractor(fieldExtractor);
fileItemWriter.setLineAggregator(lineAggregator);
fileItemWriter.setShouldDeleteIfEmpty(true);
return fileItemWriter;
}
答案 0 :(得分:0)
任何人都可以指导发生什么问题吗?
三件事:
"
在Java配置中不起作用/
中的csv/...
在文件名中不是有效字符您需要按以下方式声明您的作者:
@Bean
public FlatFileItemWriter itemWriter(@Value("employees-#{new java.text.SimpleDateFormat('Mddyyyyhhmmss').format(new java.util.GregorianCalendar().getTime())}.csv") String filename) {
FlatFileItemWriter<Employees> fileItemWriter = new FlatFileItemWriter<>();
fileItemWriter.setResource(new FileSystemResource(filename));
...
return fileItemWriter;
}
但是我建议使用步骤作用域项目编写器,并将文件名作为作业参数传递,而不要使用SpEL表达式。