|
对于最新稳定版本,请使用Spring Batch Documentation 6.0.0! |
配置作业仓库
如前所述,该JobRepository用于各种持久化的基本CRUD作
Spring Batch 中的域对象,例如作业执行和步执行.
许多主要框架功能都要求它,例如JobLauncher,工作和步.
-
Java
-
XML
使用@EnableBatchProcessing一个JobRepository为你提供。
本节将介绍如何自定义它。作业配置选项
存储库可以通过以下属性来指定@EnableBatchProcessing注释,如下示例所示:
@Configuration
@EnableBatchProcessing(
dataSourceRef = "batchDataSource",
transactionManagerRef = "batchTransactionManager",
tablePrefix = "BATCH_",
maxVarCharLength = 1000,
isolationLevelForCreate = "SERIALIZABLE")
public class MyJobConfiguration {
// job definition
}
这里列出的任何配置选项都不是必需的。
如果未设置,则使用之前显示的默认值。
最大瓦尔查尔长度默认为2500,即
长距离长度瓦尔查尔示例模式脚本中的列
批处理命名空间抽象了许多实现细节JobRepository实现及其合作者。不过,仍有少数人
可用的配置选项如下示例所示:
<job-repository id="jobRepository"
data-source="dataSource"
transaction-manager="transactionManager"
isolation-level-for-create="SERIALIZABLE"
table-prefix="BATCH_"
max-varchar-length="1000"/>
除了身份证,之前列出的配置选项均非必需。如果他们是
未设置,使用之前显示的默认值。
这最大变长默认为2500,即长的长度瓦尔查尔示例模式脚本中的列。
JobRepository 的事务配置
如果命名空间或提供的工厂豆是使用的,交易性建议是
自动在仓库周围创建。这是为了确保批处理元数据,
包括在失败后重启所需的状态,并且会被正确持久化。
如果仓库方法没有明确定义,框架的行为也没有明确定义
事务。隔离能级创造*方法属性被指定
分别确保当作业启动时,如果两个进程同时尝试启动
同一任务同时完成,只有一个成功。该标准的隔离水平
方法是序列 化,这相当激进。READ_COMMITTED通常效果一样好
井。READ_UNCOMMITTED如果两个过程不太可能碰撞,则是可以的
道路。然而,由于有呼叫创造*方法相当简短,不太可能序列 化只要数据库平台支持,就会带来问题。不过,你
可以覆盖这个设置。
-
Java
-
XML
以下示例展示了如何在 Java 中覆盖隔离级别:
@Configuration
@EnableBatchProcessing(isolationLevelForCreate = "ISOLATION_REPEATABLE_READ")
public class MyJobConfiguration {
// job definition
}
以下示例展示了如何在 XML 中覆盖隔离级别:
<job-repository id="jobRepository"
isolation-level-for-create="REPEATABLE_READ" />
如果未使用命名空间,你还必须配置 通过使用 AOP 处理存储库的交易行为。
-
Java
-
XML
以下示例展示了如何配置仓库的交易行为 在爪哇语中:
@Bean
public TransactionProxyFactoryBean baseProxy() {
TransactionProxyFactoryBean transactionProxyFactoryBean = new TransactionProxyFactoryBean();
Properties transactionAttributes = new Properties();
transactionAttributes.setProperty("*", "PROPAGATION_REQUIRED");
transactionProxyFactoryBean.setTransactionAttributes(transactionAttributes);
transactionProxyFactoryBean.setTarget(jobRepository());
transactionProxyFactoryBean.setTransactionManager(transactionManager());
return transactionProxyFactoryBean;
}
以下示例展示了如何配置仓库的交易行为 以XML形式表示:
<aop:config>
<aop:advisor
pointcut="execution(* org.springframework.batch.core..*Repository+.*(..))"/>
<advice-ref="txAdvice" />
</aop:config>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" />
</tx:attributes>
</tx:advice>
你几乎可以原版使用前面的片段,几乎不做任何修改。还要记得
包含适当的命名空间声明并确保春季-德克萨斯和春季-AOP(或者说整个春季)都在上班路上。
更改表前缀
另一个可修改的性质JobRepository是元数据的表前缀
表。默认情况下,它们都以以下形式开头批_.BATCH_JOB_EXECUTION和BATCH_STEP_EXECUTION是两个例子。不过,确实有理由需要修改这一点
前缀。如果需要将模式名称加在表名前,或者如果有多个
在同一模式内需要一组元数据表,表前缀需要
被改变。
-
Java
-
XML
以下示例展示了如何在 Java 中更改表前缀:
@Configuration
@EnableBatchProcessing(tablePrefix = "SYSTEM.TEST_")
public class MyJobConfiguration {
// job definition
}
以下示例展示了如何在 XML 中更改表前缀:
<job-repository id="jobRepository"
table-prefix="SYSTEM.TEST_" />
鉴于上述变化,每次对元数据表的查询都以系统。测试_.BATCH_JOB_EXECUTION被称为系统。TEST_JOB_EXECUTION.
| 只有表前缀可以配置。但表和列名则不然。 |
仓库中的非标准数据库类型
如果你使用的数据库平台不在支持的平台列表中,
如果SQL变体足够接近,可能还能使用支持的类型之一。要做
这个,你可以用RAW。JobRepositoryFactoryBean取代命名空间快捷方式和
用它来设置数据库类型,匹配最接近。
-
Java
-
XML
以下示例展示了如何使用JobRepositoryFactoryBean设置数据库类型
到爪哇最接近的匹配:
@Bean
public JobRepository jobRepository() throws Exception {
JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
factory.setDataSource(dataSource);
factory.setDatabaseType("db2");
factory.setTransactionManager(transactionManager);
return factory.getObject();
}
以下示例展示了如何使用JobRepositoryFactoryBean设置数据库类型
与XML中最接近的匹配点:
<bean id="jobRepository" class="org...JobRepositoryFactoryBean">
<property name="databaseType" value="db2"/>
<property name="dataSource" ref="dataSource"/>
</bean>
如果未指定数据库类型,则JobRepositoryFactoryBean试图
自动检测数据库类型数据来源.
平台之间的主要区别有
主要由主键递增策略来解释,因此
通常需要覆盖增量工厂也(通过使用标准
Spring 框架中的实现)。
如果连这些都不行,或者你没有使用关系数据库管理系统(RDBMS),那
唯一的选择可能是实现道接口简易作业仓库取决于
然后用正常的Spring方式手动接线。