跳過記錄處理
使用跳過記錄處理來跳過交易式批次工作中的讀取及寫入記錄錯誤。 在 xJCL 中指定跳過記錄原則。
跳過記錄處理
每一個批次資料串流都有自己的跳過記錄原則配置。 您可以在 xJCL 中為 com.ibm.batch.bds.skip.count 批次資料串流內容指定非零值,以啟用跳過記錄處理。
You can refine skip record processing by using the com.ibm.batch.bds.skip.include.exception.class.<n> property to specify what record errors to skip and the com.ibm.batch.bds.skip.exclude.exception.class.<n> property to specify what record errors not to skip. 這兩個內容互斥。
批次架構會根據本端工作狀態資料庫中的每個步驟,來追蹤跳過記錄處理。 僅針對來自批次架構的批次資料串流執行此追蹤。 在步驟處理結束時,會將訊息寫入工作日誌。 此訊息指出每個批次資料串流跳過的記錄數,以及每個批次資料串流每秒的記錄數。 每秒記錄數可能不符合批次資料串流所處理的記錄數。 如果處理的實際記錄數小於秒,則會從處理實際記錄數所花費的時間量推斷每秒記錄數的值。
下列清單包含後面接著說明的每一個跳過記錄內容。
- com.ibm.batch.bds.skip.count
指定由於讀取或寫入記錄時發生錯誤,批次資料串流可以跳過的記錄數。 達到此限制之後,批次資料串流不會跳過任何其他讀取或寫入錯誤。
跳過輸入記錄時,批次資料串流會移至下一筆記錄並提取它。 在順利讀取記錄、發生不涉及跳過記錄的錯誤或達到跳過限制之前,控制不會回到呼叫端。
跳過輸出記錄時,批次資料串流會正常返回給呼叫者。
在達到跳過限制之後,如果批次資料串流發生讀取或寫入錯誤,則會將讀取或寫入異常狀況傳回給呼叫程式。 未跳過記錄。
如果您向批次資料串流登錄跳過接聽器,則跳過接聽器會接收每筆跳過記錄的控制權。 對於跳過的讀取,會呼叫 SkipListener.onSkippedRead (Throwable t) 方法。 在提取下一筆記錄之前,跳過接聽器會先接收控制。 對於跳過的寫入,會呼叫 SkipListener.onSkippedWrite (Object record , Throwable t) 方法。 跳過的記錄會在第一個引數中傳遞。 在批次資料串流傳回給呼叫者之前,跳過接聽器會接收控制權。
批次資料串流的執行中跳過計數會在每個檢查點持續保存。 當工作步驟再次啟動時,會從前次確定的檢查點還原跳過計數。
依預設會停用跳過記錄處理。
任何延伸 com.ibm.websphere.batch.devframework.datastreams.bdsadapter 的批次資料串流實作。AbstractBatchDataInputStreamRecordMetrics 類別或 com.ibm.websphere.batch.devframework.datastreams.bdsadapter。AbstractBatchDataOutputStreamRecordMetrics 類別會自動繼承 skip-record 支援。 在 com.ibm.websphere.batch.devframework.datastreams 套件下定義的所有批次資料串流都包含 skip-record 支援。
- com.ibm.batch.bds.skip.include.exception.class.<n>
指定在讀取或寫入記錄時要跳過之批次資料串流的異常狀況清單。 批次資料串流只會跳過清單中的異常狀況。
The <n> variable is an integer. 從 1 開始變數,並針對每一個異常狀況增加一個變數。
如果您未指定任何異常狀況,則預設值是所有異常狀況都包含在要跳過的讀取/寫出器錯誤清單中。
下列範例使用內容:
<batch-data-streams> <bds> <logical-name>inputBDS</logical-name> <props> <prop name="PATTERN_IMPL_CLASS" value="com.ibm.ws.batch.sample.bds.WCGSampleBDS"/> <prop name="file.encoding" value="8859_1"/> <prop name="FILENAME" value="/tmp/input.txt" /> <prop name="com.ibm.batch.bds.skip.count" value="5" /> <prop name="com.ibm.batch.bds.skip.include.exception.class.1" value="java.io.IOException" /> <prop name="com.ibm.batch.bds.skip.include.exception.class.2" value="com.xyz.bds.error.BadDataException" /> </props> <impl-class>com.ibm.websphere.batch.devframework.datastreams.patterns.TextFileReader</impl-class> </bds> </batch-data-streams>
批次資料串流會跳過輸入/輸出異常狀況及不正確資料異常狀況的記錄。
- com.ibm.batch.bds.skip.exclude.exception.class.<n>
指定在讀取或寫入記錄時無法跳過的異常狀況清單。
The <n> variable is an integer. 從 1 開始變數,並針對每一個異常狀況增加一個變數。
如果您未指定任何異常狀況,則預設值是不會從要跳過的讀寫記錄錯誤清單中排除任何記錄。
下列範例使用內容:
<batch-data-streams> <bds> <logical-name>inputBDS</logical-name> <props> <prop name="PATTERN_IMPL_CLASS" value="com.ibm.ws.batch.sample.bds.WCGSampleBDS"/> <prop name="file.encoding" value="8859_1"/> <prop name="FILENAME" value="/tmp/input.txt" /> <prop name="com.ibm.batch.bds.skip.count" value="3" /> <prop name="com.ibm.batch.bds.skip.exclude.exception.class.1" value="java.io.FileNotFoundException" /> </props> <impl-class>com.ibm.websphere.batch.devframework.datastreams.patterns.TextFileReader</impl-class> </bds> </batch-data-streams>
批次資料串流不會跳過「找不到檔案」異常狀況的記錄。
跳過接聽器
您可以向批次資料串流登錄跳過接聽器,以接聽跳過的記錄。 每當跳過記錄時,跳過接聽器都會接收控制。
AbstractBatchDataInputStream _inputBDS =
(AbstractBatchDataInputStream)BatchDataStreamMgr.getBatchDataStream("inputBDS", getJobStepID());
((AbstractBatchDataStreamRecordMetrics)_inputBDS).addSkipListener(new MySkipListener());