FileWriterPattern
Das Muster FileWriterPattern wird verwendet, um Textdaten in eine Datei zu schreiben.
Unterstützungsklassen
Die Klasse "TextFileWriter" stellt die Logik zum Öffnen und Schreiben von Zeichenfolgedaten in die gegebene Datei bereit. Die Datei wird entweder im Anfügemodus oder im Überschreibmodus geöffnet, je nachdem, welche Eigenschaften angegeben wurden. Während eines Jobneustarts wird die Datei immer im Anfügemodus geöffnet.
Es gibt zwei Möglichkeiten, den Dateinamen von TextFileWriter dynamisch über JobStepContext zu definieren:
- Verwenden Sie eine bekannte, von Compute Grid definierte Eigenschaft auf Jobebene. Sehen Sie sich das folgende
Beispiel an:
Wenn Sie den Wert für "/my/fileName" vor der Initialisierung von TextFileWriter setzen, wird dieser Wert von TextFileWriter als Dateiname verwendet.JobStepContext ctx= JobStepContextMgr.getContext(); Properties jobProps = ctx.getJobLevelProperties(); jobProps.set(TextFileWriter. FILENAME_JOBSTEPCONTEXT_DEFAULT_PROPERTY_NAME, "/my/fileName");
- Verwenden Sie Ihre eigene, von einer xJCL-Eigenschaft auf BDS-Ebene definierte angepasste Eigenschaft.
Verwenden Sie diese Methode, wenn Sie zwei Writer haben und jeder Writer einen anderen Dateinamen benötigt. Verwenden Sie in dieser Methode die folgende xJCL-Eigenschaft auf BDS-Ebene, um den Namen der Eigenschaft JobStepContext anzugeben: com.ibm.websphere.batch.devframework.datastreams.patterns.TextFileWriter.FILENAME.xjcl.custom.property.name. Beispiele:
xJCL <bds> <logical-name>outputStream</logical-name> <impl-class>com.ibm.websphere.batch.devframework.datastreams.patterns.TextFileWriter</impl-class> <props> <prop name="PATTERN_IMPL_CLASS" value="mypkg.MyWriter"/> <prop name="FILENAME" value="/my/staticFileName.txt"/> <!-- Diese Einstellung wird wirksam, wenn die dynamische Konfiguration nicht gesetzt ist. --> <prop name="AppendJobIdToFileName" value="true"/> <!-- Existing options are still usable with dynamically-determined filenames --> <prop name="debug" value="true"/> <prop name="com.ibm.websphere.batch.devframework.datastreams.patterns.TextFileWriter.FILENAME.xjcl.custom.property.name" value="my.bds.specific.property.name"/> </props> </bds> </batch-data-streams> </job-step>
Setzen Sie wie bei der ersten Methode die Eigenschaft auf Jobebene, bevor Sie die Initialisierung von TextFileWriter durchführen. Beispiel:JobStepContext ctx= JobStepContextMgr.getContext(); Properties jobProps = ctx.getJobLevelProperties(); jobProps.set("my.bds.specific.property.name", "/my/fileName");
Erforderliche Eigenschaften
Die folgenden Eigenschaften sind für das Muster erforderlich.
Eigenschaftsname | Wert |
---|---|
PATTERN_IMPL_CLASS | Die Klasse, die die Schnittstelle FileWriterPattern implementiert. |
FILENAME | Vollständiger Pfad zur Eingabedatei |
Optionale Eigenschaften
Die folgenden Eigenschaften sind für das Muster optional.
Eigenschaftsname | Wert | Beschreibung |
---|---|---|
debug | true oder false (der Standardwert ist false) | Aktiviert detailliertes Tracing in diesem Stapeldatenstrom. |
EnablePerformanceMeasurement | true oder false (der Standardwert ist false) | Berechnet die Gesamtzeit in den Stapeldatenströmen und in der Methode "processRecord" bei Verwendung des GenericXDBatchStep. |
EnableDetailedPerformanceMeasurement | true oder false (der Standardwert ist false) | Bietet eine detailliertere Aufgliederung der Zeit pro Methode des Stapeldatenstroms. |
file.encoding | Codierung der Datei. | Beispiel: 8859_1 |
AppendJobldToFileName | true oder false (der Standardwert ist false) | Hängt die Job-ID an den Dateinamen an, bevor die Datei geladen wird. |
append | true oder false (der Standardwert ist true) | Bestimmt, ob die Datei im Anfügemodus (append) geöffnet wird.
Wichtig: Während eines Neustarts wird die Datei immer im Anfügemodus geöffnet.
|
Schnittstellendefinition
public interface FileWriterPattern {
/**
* Wird bei der Konfiguration des Abschnitts aufgerufen
* @param props
*/
public void initialize(Properties props);
/**
* Diese Methode muss das jeweilige Datensatzobjekt in den BufferedWriter schreiben.
* @param out
* @param record
* @throws IOException
*/
public void writeRecord(BufferedWriter out, Object record) throws IOException;
/**
* Diese Methode wird nur einmal nach dem Öffnen des bufferedwriter aufgerufen.
* Sie sollte zum Schreiben aller Header-Informationen verwendet werden.
* @param out
* @throws IOException
*/
public void writeHeader(BufferedWriter out) throws IOException;
/**
* Diese Methode kann während des Verarbeitungsschritts aufgerufen werden,
* um den Header explizit zu initialisieren und zu schreiben.
* @param header
* @throws IOException
*/
public void writeHeader(BufferedWriter out, Object header) throws IOException;
}
Beispiel für xJCL
<batch-data-streams>
<bds>
<logical-name>outputStream</logical-name>
<props>
<prop name="PATTERN_IMPL_CLASS" value="com.ibm.websphere.batch.samples.tests.bds.EchoWriter"/>
<prop name="file.encoding" value="8859_1"/>
<prop name="FILENAME" value="/opt/txlist.txt" />
<prop name="debug" value="true"/>
</props>
<impl-class>com.ibm.websphere.batch.devframework.datastreams.patterns.TextFileWriter</impl-class>
</bds>
</batch-data-streams>