2013-07-19 3 views
0

У меня есть пункт писатель, выполненный, как показано ниже, который генерирует XML:StaxEventItemWriter - Файл не доступна для записи проблема

<beans:bean id="delegateItemWriter" class="org.springframework.batch.item.xml.StaxEventItemWriter" scope="step"> 
    <beans:property name="resource" value="file:#{jobParameters['OutputDirPath']}${myFileName}" /> 
    <beans:property name="overwriteOutput" value="true"/> 
    <beans:property name="rootTagName" value="disclosure-feed" /> 
    <beans:property name="rootElementAttributes" > 
     <beans:map> 
      <beans:entry key="xmlns:xsi" value="http://www.w3.org/2001/XMLSchema-instance" />    
      <beans:entry key="xsi:noNamespaceSchemaLocation" value="XYZ.xsd"/> 
     </beans:map> 
    </beans:property> 
    <beans:property name="marshaller" ref="xmlMarshaller" /> 
</beans:bean> 

Даже если каждая вещь кажется правильной, иногда при перезапуске работы после фиксации неудачи предыдущего запуска, я получить ниже сообщение об ошибке:

2013-07-19 02:14:34,921 [main] ERROR org.springframework.batch.core.step.AbstractStep - Encountered an error executing the step 
org.springframework.batch.item.ItemStreamException: File is not writable: [/myOutputDir/myOutput.xml] 

Когда я вручную удалить записи из таблиц заданий batch_ так, что работа начинается заново с самого начала, а не от того, где он не смог во время последнего запуска, то файл будет генерироваться, как и ожидалось.

В чем причина этой проблемы? Как его решить? Есть ли какие-то элементы конфигурации, которые мне не хватает?

Спасибо за чтение!

+0

убедитесь, что у файла есть соответствующие разрешения для записи. попробуйте один раз, сохранив разрешение 0777. – Reddy

+0

@Reddy: файл создается автоматически изнутри писателя. И, как уже упоминалось, во время обычного прогона (с нуля) такая ошибка не возникает, и все работает плавно. – Nik

ответ

1

Похож на ошибку в org.springframework.batch.item.utilFileUtils.java, Spring-партия ожидает файл, уже созданный в первом запуске.

if (!restarted) { 
       if (file.exists()) { 
        ... 
       } 
       if (file.getParent() != null) { 
        new File(file.getParent()).mkdirs(); 
       } 
       file.createNewFile(); 
    } 

    if (!file.canWrite()) { 
      throw new ItemStreamException("File is not writable..."); 
    } 

Если это перезагрузка, файл не создается, поэтому вы получаете исключение.

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