Spring Batch - создайте новое уникальное имя CSV при записи данных с использованием API FlatFileItemWriter

Prateek спросил: 13 июня 2018 в 07:58 в: spring

Я попробовал решение, примененное в сообщении здесь: Spring Batch - создать новый файл каждый вместо того, чтобы переопределять его для передачи данных из CSV в XML , но это не сработало для используемой мной аннотации.

fileItemWriter.setResource(new FileSystemResource("csv/employees-#{new java.text.SimpleDateFormat("Mddyyyyhhmmss").format(new java.util.GregorianCalendar().getTime())}.csv"));

Планируется мое пакетное задание для запуска через каждые 1 час это пакетное задание считывает таблицу и записывает данные в файл CSV. Когда записываются данные, мне нужно создать новый файл в целом. Будет хорошо, если имя файла уникально, поэтому я искал, чтобы реализовать дату и т. Д. В соответствии с постами.

Может ли кто-нибудь вести что-то не так?

1 ответ

Mahmoud Ben Hassine ответил: 16 июня 2018 в 01:17

Может ли кто-нибудь вести что-то не так?

Три вещи:

  • Выражения SpEL не интерпретируются при использовании, как вы. li>
  • ", скопированный из примера xml, не будет работать в конфигурации 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.