Java 批次的持續性配置

Java™ 批次可以將工作儲存庫配置成使用持續儲存庫,在工作實例的多次執行之間持續保存狀態、檢查點及應用程式持續資料。 對於先前執行失敗或必須停止的工作實例,持續儲存庫可讓它重新啟動,其作法是提供適當資料給重新啟動的工作。

工作儲存庫

工作儲存庫包括受資料庫支援的持續儲存庫,或僅適用於開發的記憶體型持續儲存庫。 Liberty 批次功能可讓您彈性定義環境,讓多部伺服器可以使用一般持續儲存庫或工作儲存庫。 瞭解許多功能限於已配置成使用相同工作儲存庫的所有伺服器,這非常重要。 如需相關資訊,請參閱 工作儲存庫

Java 批次的記憶體型持續性配置

一旦工作實例執行在「失敗」或「停止」狀態下結束時,批次持續性可讓該工作實例重新啟動。 如果沒有批次持續性的資料庫配置, Java 批次會預設為基於記憶體的持續性,以在工作實例的多次執行之間追蹤狀態、檢查點及應用程式持續資料。

附註: 預設記憶體型持續性有明顯但重要的限制。  如果批次儲存器執行時期環境或伺服器 JVM 當機或重新啟動,就會喪失持續性。這個功能專用於開發,不適用於正式作業系統或重要的批次處理支援。

Java 批次資料庫持續性配置

批次持續性可透過資料庫儲存庫來配置。 資料庫儲存庫會參照資料來源,資料來源又會參照 JDBC 驅動程式、特定的資料庫位置,以及其他資料庫自訂內容。 批次持續性表格的完整名稱可以使用資料庫儲存庫本身的 schematablePrefix 屬性來配置。

系統會提供預設資料庫儲存庫(名稱是 defaultDatabaseStore),且會藉由配置預設資料來源 (名稱是 DefaultDataSource)來啟動它。

或者,您可以使用 databaseStore 元素來配置不同的資料庫儲存庫,並且配置批次持續性來使用它,作法是新增

batchPersistence 元素,且其含有一個會參照您 databaseStorejobStoreRef 屬性。

Java 批次資料庫連線儲存區考量

一般而言,當呼叫資料庫時, Java 批次執行時期會遵循 get-use-close 型樣,且通常不會保留 JDBC 連線超過使用它們的時間。也就是說,在伺服器上執行特定數量的工作與分割區時,到底需要多少連線數,幾乎是由管理者全權決定。

您不需要將連線儲存區大小配置成大於或等於執行中的工作數與分割區數,來避免死鎖。 由於連線數太少,資源競用仍可能造成效能不能達到最佳。 還是需要指定連線數目下限(例如大於 1),以執行特殊路徑,例如:啟動批次元件。 管理者可以從預設值開始,並使用連線儲存區度量和監視功能,例如,讓資源取用與效能之間達到平衡。 這適用於執行時期的 JDBC 連線使用。 管理者可能仍需要考量 JDBC 連線儲存區,因為應用程式碼會使用它。

自動/手動建立資料庫表格的對照

依預設,批次執行時期會在批次持續性資料庫儲存庫中,自動建立不存在的表格。 這種預設自動建立行為也會延伸現有的表格,而如果所套用的維護工作會提供新直欄定義,此行為也會建立這些新直欄。

或者,可以使用 ddlGen Script,根據伺服器配置來產生 DDL。 必要的話,可在手動建立表格之前先自訂 DDL。 這個 DDL 也會納入伺服器配置,例如 schematablePrefix,且包含資料庫儲存庫所參照之資料來源的資料庫類型所適用的 SQL。

附註: 自訂的 DDL 必須使用正整數主要索引鍵 ID。 由於資料庫持續性的限制,「Java 批次」不接受主要索引鍵身分直欄中持續保存的負整數或零整數 ID。 「Java 批次」儲存器執行時期只會執行使用主要索引鍵身分直欄中持續保存之正整數工作 ID 的工作。

如果要停用自動建立表格,請在 databaseStore 中使用 createTables="false" 屬性。 一旦批次執行時期意外找不到您手動建立的表格,這個選項可用來確定您使用手動建立的表格,而不是使用自動建立的表格。

若要瞭解如何透過自訂產生的 DDL (包括可能的自訂作業) 來手動建立表格,請參閱 Liberty 批次-工作儲存庫配置 白皮書。 雖然此白皮書適用於 z/OS® 作業系統上的 DB2® ,但您可能會找到適用於其他資料庫及平台的資訊。

持續性配置範例

具有自動建立表格的預設資料庫儲存庫(配置成使用 Derby 資料庫 RUNTIMEDB):

<!-- Derby JDBC driver --> 
<library id="DerbyLib"> 
    <fileset dir="${server.config.dir}/resources/derby" /> 
</library> 

<!-- Data source for batch tables, and possibly other components. --> 
<dataSource id="DefaultDataSource"> 
    <jdbcDriver libraryRef="DerbyLib" /> 
    <properties.derby.embedded  
        databaseName="${server.config.dir}/resources/RUNTIMEDB"     
        createDatabase="create" 
        user="user" password="pass" /> 
</dataSource> 

具有手動建立的表格、自訂綱目、表格字首和批次資料來源的批次專用資料庫儲存庫

<batchPersistence jobStoreRef="BatchDatabaseStore"/>

<!-- DB Store config only used by batch components -->
<databaseStore id="BatchDatabaseStore" dataSourceRef="BatchDS"
    createTables="false" schema="HLQ" tablePrefix="JB1"/> 

<!-- Data source for batch tables --> 
<dataSource id="BatchDS"> 
    <jdbcDriver libraryRef="DerbyLib" /> 
     ...
</dataSource> 

具有鑑別配置、自訂綱目、自動建立的表格、預設資料來源的預設資料庫儲存庫:

<!-- DB Store used by batch and possibly other runtime components. --> 
<databaseStore id="defaultDatabaseStore" schema="HLQ">
    <authData user="user1" password="password1"/>  
</databaseStore>

<!-- Data source for batch tables, and possibly other components. --> <dataSource id="DefaultDataSource"> 
    <jdbcDriver libraryRef="DerbyLib" /> 
    ...
</dataSource> 

參考

如需自訂產生的 DDL (包括可能的自訂作業) 來手動建立表格的討論,請參閱白皮書: https://www.ibm.com/support/techdocs/atsmastr.nsf/WebIndex/WP102716