Java 批处理持久性配置
Java 批处理使用持久性存储以在作业实例的多次运行间保存状态、检查点和应用程序持久数据。持久性存储允许作业实例重新启动(如果之前运行失败或必须停止),方法是为重新启动的作业提供相应数据。
Java 批处理的基于内存的持久性配置
批处理持久性允许作业实例以“失败”或“停止”状态结束后重新启动。如果缺少批处理持久性配置,那么 Java 批处理使用缺省功能(基于内存的持久性)在作业实例的多次运行间跟踪状态、检查点和应用程序持久数据。
如果 server.xml 文件中没有 batchPersistence 和 databaseStore 元素,那么底层批处理容器将对 Java 批处理使用缺省的基于内存的持久性实现。
注: 作为对 Java 批处理的基于内存的持久性的限制,缺省情况下,Java 批处理中的持久性基于内存。如果批处理容器运行时或服务器 JVM 崩溃或重新启动,那么持久性将丢失。此功能仅适用于开发用途,不适用于生产系统或关键批处理支持。
Java 批处理的数据库持久性配置
缺省情况下,批处理运行时根据 databaseStore 元素中定义的服务器配置自动创建不存在的表。表定义是根据数据库存储的 schema 和 tablePrefix 属性定制的。
或者,可使用 ddlGen 脚本根据服务器配置生成 DDL。必要时,可在手动创建表前定制该 DDL。此 DDL 还合并了 schema 和 tablePrefix 等服务器配置,并且包含与 databaseStore 所引用数据源的数据库类型相应的 SQL。
注: 定制 DDL 必须使用正整数主键标识。作为数据库持久性的限制,Java 批处理不会接受在主键标识列中持久存储的负整数或为零的标识。Java 批处理容器运行时仅运行使用主键标识列中持久存储的正整数作业标识的作业。
可对 databaseStore 使用 createTables="false" 属性来禁止自动创建表。此选项可用于确保批处理运行时意外地找不到您手动创建的表时使用手动创建的表而不是自动创建的表。
以下样本使用缺省自动创建行为。此行为相当于 createTables="true"。
注: 要避免因隔离级别低于 REPEATABLE_READ 而导致的数据完整性问题,请将数据源的隔离级别设置为 TRANSACTION_REPEATABLE_READ。如果不指定隔离级别,那么缺省值取决于数据库。在大多数情况下,缺省值为 TRANSACTION_REPEATABLE_READ。
持久性配置样本
以下样本配置对 Derby 的自动创建的目标数据库表 RUNTIMEDB 的批处理访问。
<!-- Batch persistence config. References a databaseStore. -->
<batchPersistence jobStoreRef="BatchDatabaseStore" />
<!-- The database store for the batch tables. -->
<!-- Note this database store is referenced by the batchPersistence element. -->
<databaseStore id="BatchDatabaseStore" dataSourceRef="batchDB" schema="JBATCH" tablePrefix="" />
<!-- Derby JDBC driver -->
<!-- Note this library is referenced by the dataSource element -->
<library id="DerbyLib">
<fileset dir="${server.config.dir}/resources/derby" />
</library>
<!-- Data source for the batch tables. -->
<!-- Note this data source is referenced by databaseStore element -->
<dataSource id="batchDB" isolationLevel="TRANSACTION_REPEATABLE_READ" >
<jdbcDriver libraryRef="DerbyLib"/>
<properties.derby.embedded
databaseName="${server.config.dir}/resources/RUNTIMEDB"
createDatabase="create"
user="user"
password="pass" />
</dataSource>