1

以下のように構成されたアイテムライターがあり、xml を生成します。

<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_ テーブルからジョブ エントリを削除すると、ファイルが期待どおりに生成されます。

この問題の理由は何ですか? それを解決する方法? 不足している構成要素はありますか?

読んでくれてありがとう!

4

3 に答える 3

0

私は同じ問題に遭遇しました。問題を解決するために、Java Config クラスに新しいファイルを作成しました。ジョブが実行されるたびに、構成の初期化中に新しいファイルが作成されます。したがって、再起動時にもファイルは既に作成されています。

FlatFileItemWriter<List<String>>  flatFileWriter= new FlatFileItemWriter<>();
DelimitedLineAggregator<List<String>> delimitedLineAggregator = new DelimitedLineAggregator<>();
delimitedLineAggregator.setDelimiter(System.lineSeparator());
Resource res = new FileSystemResource(file);
res.getFile().createNewFile();
flatFileWriter.setResource(res);

私のユースケースの新しいファイルを作成する際に問題は見られません。

于 2018-08-07T15:52:52.210 に答える
-1

ジョブを定義する際に、jobBuilderFactory で preventRestart() メソッドを呼び出してください。ジョブが実行されるたびに、restart プロパティは true になります。したがって、ファイルが存在することを期待しています。

于 2018-05-09T17:42:46.533 に答える