Создание файла в ItemWriter с расписанием - не удалось, поскольку файл уже существует - PullRequest
0 голосов
/ 13 марта 2020

У меня есть весенний пакетный проект. Он читает из входного файла, обрабатывает строки, а затем записывает, создает файл и вставляет строки, поступающие от процессора. Сама партия отлично работает. Чтение входного файла, строк процесса и выходного файла создан.

Проблема в том, что подпружиненная партия выполнена с кварцем, который запускается каждую минуту. Первая итерация является успешной, как описано выше. Но второй и nexts cra sh, потому что он говорит, что файл уже существует.

public class StaticItemWriter extends FlatFileItemWriter<String>{

  private static final Logger LOG = LoggerFactory.getLogger(StaticItemWriter.class);

  private String outputPathName;
       private static final String OUTPUT = "OUTPUT_"; 
       private static final String EXTENSION = ".txt"; 
       private FileSystemResource fsr;
       InputStream is = null; 
       String resource = "C:/Users/zek896/Notification_HUB/batch/smai/files/input/sms_sent/";

       public StaticItemWriter() {
             this.setShouldDeleteIfExists(false);
             DelimitedLineAggregator<String> lineAggregator = new DelimitedLineAggregator<>();
             lineAggregator.setDelimiter(";;");
             this.setLineAggregator(lineAggregator);
       }

       public StaticItemWriter execute(SimpleDateFormat sdf) {
          DateFormat df = sdf;    
             outputPathName = resource + OUTPUT + df.format(new Date())  + EXTENSION;
             System.out.println("outputPathName: " + outputPathName);
             this.fsr = new FileSystemResource(outputPathName);
             this.setResource(fsr);
             this.setAppendAllowed(false);
             this.setShouldDeleteIfExists(false);
             DelimitedLineAggregator<String> lineAggregator = new DelimitedLineAggregator<>();
             lineAggregator.setDelimiter(";;");
             this.setLineAggregator(lineAggregator);

             return this;
  }
}


  @Bean
  public ItemWriter<String> write() {
         System.out.println("writer");
    return new StaticItemWriter().execute(new SimpleDateFormat("yyyyMMddHHmmss"));
  }


  @Bean
  public Step aggregationStep() {
       return stepBuilder.get("aggregationStep")
                    .<Person, String> chunk(100)
                    .reader(eligibleCustomersReader())
                    .processor(dispatchRequestProcessor())
                    .writer(write())
                    .faultTolerant()
                    .build();
  }

Должен ли я использовать тасклет как-то для его решения?

Большое спасибо за вашу помощь.

С уважением

...