Java 批处理持久性配置
Java™ 批处理使用持久性存储,在作业实例的多次运行之间保存状态、检查点和应用程序持久数据。持久性存储通过为重新启动的作业提供相应的数据,允许作业实例在之前运行失败或必须停止后重新启动。
基于内存的 Java 批处理持久性配置
批处理持久性允许作业实例以“失败”或“停止”状态结束后重新启动。不存在用于批处理持久性的数据库配置时,Java 批处理会缺省为使用基于内存的持久性,在作业实例的多次运行间跟踪状态、检查点和应用程序持久数据。
Java 批处理数据库持久性配置
可以通过数据库存储器来配置批处理持久性。数据库存储器会引用一个数据源,该数据源进而引用 JDBC 驱动程序、特定的数据库位置和其他数据库定制属性。可以使用数据库存储器本身的 schema 和 tablePrefix 属性来配置批处理持久性表的限定名。
系统随附名为 defaultDatabaseStore 的缺省数据库存储器,您可通过配置名为 DefaultDataSource 的缺省数据源将其激活。
或者,您可使用 databaseStore 元素来配置另一个数据库存储器,并通过添加
具有 jobStoreRef 属性(引用 databaseStore)的 batchPersistence 元素,将批处理持久性配置为使用该数据库存储器。
Java 批处理数据库连接池注意事项
一般而言,对数据库执行调用时,Java 批处理运行时遵循“获取/使用/关闭”模式,并且占用 JDBC 连接的时间通常不超过使用这些连接的时间。这意味着,在服务器上运行特定数目的作业和分区所需的连接数几乎完全由管理员决定。
您无需将连接池大小配置为大于或等于运行中的作业数和分区数以避免死锁。因为连接太少而引起的资源争用仍可能会导致性能欠佳。另外,运行特殊路径(例如,激活批处理组件)也有最小必需连接数(可能大于 1)。管理员可以从缺省值入手,在资源耗用与性能之间进行平衡(例如,使用连接池度量值和监视功能实现此目的)。这适用于 JDBC 连接的运行时使用。管理员可能仍需考虑应用程序代码所要使用的 JDBC 连接池。
自动创建数据库表与手动创建数据库表
缺省情况下,批处理运行时会在批处理持久性数据库存储器中自动创建不存在的表。这种缺省的自动创建行为还会扩展现有的表,以及创建新列(如果已应用添加这些新列定义的维护)。
或者,可使用 ddlGen 脚本根据服务器配置生成 DDL。如有必要,可在手动创建表之前定制该 DDL。此 DDL 还合并了 schema 和 tablePrefix 等服务器配置,并包含与数据库存储器所引用数据源的数据库类型相应的 SQL。
通过在 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