使用 Tasklet 方法时 FlatFileItemWriter 不生成文件

FlatFileItemWriter not generating the file when using Tasklet approach

我使用 tasklet 方法编写了以下代码来生成包含数据的文件。

    public class PersonInfoFileWriter implements Tasklet {
        @Autowired
        PersonInfoFileUtil personInfoFileUtil;
    
        public void write(ExecutionContext executionContext) throws IOException {
List<PersonInfo> personInfoList = null;
            FlatFileItemWriter<PersonInfo> flatFileWriter = new FlatFileItemWriter<PersonInfo>();
flatFileWriter.setResource(new FileSystemResource("C:\test\"
                        + LocalDate.now().format(DateTimeFormatter.BASIC_ISO_DATE) + ".txt"));
            try {
flatFileWriter.open(executionContext);
                String personName = (String) executionContext.get("personInfo");
                //gets the details of the person by name from the database and assign the values to PersonInfo
                personInfoList  = personInfoFileUtil.setDataForPersonInfoFile(personName);
                
    
                flatFileWriter.setName("Person-Detail-File");
                flatFileWriter.setShouldDeleteIfEmpty(true);
                flatFileWriter.setAppendAllowed(true);
                flatFileWriter.setLineSeparator("\n");
                flatFileWriter.setHeaderCallback(new FlatFileHeaderCallback() {
                    @Override
                    public void writeHeader(Writer writer) throws IOException {
                        writer.write(
                                "PersonId^Name^Program^ProgramType");
                    }
                });
                flatFileWriter.setLineAggregator(new DelimitedLineAggregator<PersonInfo>() {
                    {
                        setDelimiter("^");
                        setFieldExtractor((FieldExtractor<PersonInfo>) new BeanWrapperFieldExtractor<PersonInfo>() {
                            {
                                setNames(new String[] { "personId", "name", "program", "programType" });
                            }
                        });
                    }
                });
                String lines = flatFileWriter.doWrite((List<? extends PersonInfo>) personInfoList);
                logger.info(lines); //this prints the information correctly
            } finally {
                flatFileWriter.close();
            }
            
        }
    
        @Override
        public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
            ExecutionContext executionContext = contribution.getStepExecution().getJobExecution().getExecutionContext();
            write(executionContext);
            return RepeatStatus.FINISHED;
        }
    }

以上代码编译和运行没有错误,但它没有在磁盘上生成任何文件。

我尝试调试以检查文件名等值是否被创建到缓冲区以写入磁盘,除了生成数据并将数据写入文件外,一切都按预期工作。

如果我使用基于块的方法编写代码,它工作正常。

如果我做错了,请告诉我。提前感谢您的帮助。

编辑: 添加建议的更改后,文件正在磁盘上创建,但文件丢失了我使用 setHeaderCallback()[=12 设置的 header =]

在您的 write 方法中,您创建了一个 FlatFileItemWriter 的实例,在其上设置了一些属性,然后在其上调用 close

您没有调用 open()write() 方法,这就是它没有生成文件的原因。