2016-03-30 6 views
0

(im neuen Batch sorry für dumme Frage zu springen, aber Google zeigt mir kein Beispiel)Verarbeiten von Fehlern in Flat-File-Leser

Ich habe einen Batch-Job, der von Quarz um Mitternacht täglich gekickt wird. Der Job versucht eine oder mehrere flache Dateien zu lesen und verarbeitet sie. Manchmal ist die Datei, die der Job liest, NICHT dort, wo sie sein muss. also FileNotFoundException bekommen. Wir möchten dem Produktionsteam per E-Mail mitteilen, dass die erforderliche Datendatei nicht verfügbar ist.

Ich denke, etwas im Sinne des Folgenden ist die bevorzugte Art, das im Springbatch zu tun. Habe ich Recht oder gibt es einen besseren Weg? Sollte mein notifyProdSupLister in der Batch: Chunk-Anweisung?

<batch:step id="readDataFileStep" next="processDataFileStep"> 
     <batch:listeners> 
       <batch:listner ref="notifyProdSupListner"/> 
     </batch:listeners> 
     <batch:tasklet .....> 
      <batch:chunk reader="stagedDataReader" processor="extractProcessor" 
       writer="extractOutputWriter" commit-interval="1"> 
       <batch:listeners> 
        <batch:listener ref="chunkListener" /> 
       </batch:listeners> 
      </batch:chunk> 
     </batch:tasklet> 
    </batch:step> 

Ich gehe davon aus meinem listner so etwas wie Paket com.mkyong.listeners aussehen würde;

public class notifyProdSupListner implements ItemReadListener<Domain> { 

@Override 
public void onReadError(Exception ex) { 
    if (ex instanceof FileNotFoundException) { 
     //mail support group 
    } 

} 

}

Antwort

0

Ich entdeckte, dass das, was ich kann tun wollen nicht, dass die Art und Weise durchgeführt werden. Ich habe einen Job-Launcher und der Job-Launcher startet den Job nur, wenn eine Eingabedatei vorhanden und lesbar ist.

Während der ItemReadListener würde mir erlauben, Dinge zu tun, wenn sie ein Problem beim Lesen der Datei war. Da es keine Eingabedatei gab, hätte der Launcher den Job nie an erster Stelle gestartet

0

In FlatFileItemReader (ich hoffe, dass Sie das verwenden) können Sie die Eigenschaft strict = false setzen, wenn Sie den Job nicht fällen wollen Quelle ist nicht vorhanden. und für Ihren Fall können Sie es wahr halten (das ist der Standardwert, es wird IllegalStateException werfen, die Sie durch JobExecutionListener in afterJob fangen können. Dort erhalten Sie JobExecution, von dem Sie getAllFailureExceptions() abrufen können und überprüfen, ob es aus dem Grund fehlgeschlagen ist Datei existiert nicht und dann tun Sie, was auch immer Sie tun wollen, um es zu behandeln.

Verwandte Themen