2015-09-25 2 views
1

У меня есть весовое пакетное задание (определено в xml), которое генерирует экспорт csv. Внутри компонента FlatFileItemWriter Я устанавливаю ресурс, где задано имя файла.Весенняя партия: создать файл, указав имя программно

<bean id="customDataFileWriter" class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step"> 
    <property name="resource" value="file:/tmp/export/custom-export.csv"/> 
... 

Теперь мне нужно установить это имя файла с учетом определенной логики, так что мне нужно задать имя файла из некоторого класса Java. Есть идеи?

ответ

1

Вы можете реализовать свой собственный FlatFileItemWriter, чтобы переопределить метод setResource и добавить свою собственную логику для переименования файла.

Вот пример реализации:

@Override 
public void setResource(Resource resource) { 

    if (resource instanceof ClassPathResource) { 

     // Convert resource 
     ClassPathResource res = (ClassPathResource) resource; 

     try {  

      String path = res.getPath(); 

      // Do something to "path" here 

      File file = new File(path); 

      // Check for permissions to write 
      if (file.canWrite() || file.createNewFile()) { 
       file.delete(); 

       // Call parent setter with new resource 
       super.setResource(new FileSystemResource(file.getAbsolutePath())); 
       return; 
      } 
     } catch (IOException e) { 
      // File could not be read/written 
     } 
    } 

    // If something went wrong or resource was delegated to MultiResourceItemWriter, 
    // call parent setter with default resource 
    super.setResource(resource); 
} 

Другая возможность существует с использованием jobParameters, если ваша логика может быть применена, прежде чем работа начата. См. 5.4 Late Binding весенней пакетной документации.

Пример:

<bean id="flatFileItemReader" scope="step"  class="org.springframework.batch.item.file.FlatFileItemReader"> 
    <property name="resource" value="#{jobParameters['input.file.name']}" /> 
</bean> 

Вы также можете использовать MultiResourceItemWriter с обычаем ResourceSuffixCreator. Это позволит вам создавать файлы с 1 по n с общим шаблоном имени файла.

Вот пример метода getSuffix заказного ResourceSuffixCreator:

@Override 
public String getSuffix(int index) { 

    // Your logic 
    if (true) 
     return "XXX" + index; 
    else 
     return ""; 
} 
+0

Спасибо за ваш ответ. –

Смежные вопросы