配置作业仓库

所述,该JobRepository用于基本的CRUD作 Spring Batch 中各种持久域对象,例如作业执行步执行. 许多主要框架功能都要求它,例如作业操作员,工作.spring-doc.cadn.net.cn

配置无资源作业仓库

最简单的实现JobRepository接口是ResourcelessJobRepository.该实现不使用或存储批处理元数据。 它适用于不需要重启且执行上下文为 不涉及任何作(如通过执行上下文在步骤间共享数据, 或分区步骤,其中分区元数据通过管理者和工人共享 执行上下文等)。该实现保持运行单一作业的最小状态 (即1个作业实例 + 1个作业执行 + N个步骤执行)。这适合一次性工作 在他们自己的JVM中执行。该作业仓库既支持事务步骤,也支持非事务步骤 步骤(配合ResourcelessTransactionManager).spring-doc.cadn.net.cn

该实现支持线程安全,不应在任何并发环境中使用。

默认情况下,使用@EnableBatchProcessingDefaultBatchConfiguration一个ResourcelessJobRepository为你提供。spring-doc.cadn.net.cn

配置 JDBC JobRepository

使用@EnableBatchProcessing一个ResourcelssJobRepository为你提供。 本节将介绍如何自定义它。Spring Batch 提供了两种实现方式 关于JobRepository由数据库支持的接口:JDBC实现 (可与任何符合JDBC标准的数据库一起使用)以及MongoDB实现。这两个 实现方式由@EnableJdbcJobRepository@EnableMongoJobRepository分别是注释。spring-doc.cadn.net.cn

以下示例展示了如何通过属性自定义基于JDBC的作业仓库 关于@EnableJdbcJobRepository注解:spring-doc.cadn.net.cn

Java 配置
@Configuration
@EnableBatchProcessing
@EnableJdbcJobRepository(
		dataSourceRef = "batchDataSource",
		transactionManagerRef = "batchTransactionManager",
		tablePrefix = "BATCH_",
		maxVarCharLength = 1000,
		isolationLevelForCreate = "SERIALIZABLE")
public class MyJobConfiguration {

   // job definition

}

这里列出的任何配置选项都不是必需的。 如果未设置,则使用之前显示的默认值。 最大瓦尔查尔长度默认为2500,即 长距离长度瓦尔查尔示例模式脚本中的列spring-doc.cadn.net.cn

批处理命名空间抽象了许多实现细节JobRepository实现及其合作者。不过,仍有少数人 可用的配置选项如下示例所示:spring-doc.cadn.net.cn

XML 配置
<job-repository id="jobRepository"
    data-source="dataSource"
    transaction-manager="transactionManager"
    isolation-level-for-create="SERIALIZABLE"
    table-prefix="BATCH_"
	max-varchar-length="1000"/>

除了身份证,之前列出的配置选项均非必需。如果他们是 未设置,使用之前显示的默认值。 这最大变长默认为2500,即长的长度瓦尔查尔示例模式脚本中的列。spring-doc.cadn.net.cn

配置MongoDB作业仓库

类似于基于JDBC的JobRepository,基于MongoDB的JobRepository需要一些集合 用于存储批处理元数据。这些集合定义在org/springframework/batch/core/schema-mongodb.jsonl关于Spring-批次-核心罐。与基于JDBC的机构类似JobRepository你需要创建这些集合 在运行任何作业之前,先在你的MongoDB数据库中。spring-doc.cadn.net.cn

此外,由于不推荐使用.在 MongoDB文档中的字段名称,你需要自定义Mongo模板被以下机构使用MongoJobRepositoryFactoryBean替换.字段名称中包含另一个字符(例如),。你可以通过自定义_映射Mongo转换器被以下机构使用Mongo模板.以下示例展示了如何在 Java 配置中实现这一点:spring-doc.cadn.net.cn

Java 配置
@Bean
public MongoTemplate mongoTemplate(MongoDatabaseFactory mongoDatabaseFactory) {
    MongoTemplate template = new MongoTemplate(mongoDatabaseFactory);
    MappingMongoConverter converter = (MappingMongoConverter) template.getConverter();
    converter.setMapKeyDotReplacement("_");
    return template;
}

JobRepository 的事务配置

如果命名空间或提供的工厂豆是使用的,交易性建议是 自动在仓库周围创建。这是为了确保批处理元数据, 包括在失败后重启所需的状态,并且会被正确持久化。 如果仓库方法没有明确定义,框架的行为也没有明确定义 事务。隔离能级创造*方法属性被指定 分别确保当作业启动时,如果两个进程同时尝试启动 同一任务同时完成,只有一个成功。该标准的隔离水平 方法是序列 化,这相当激进。READ_COMMITTED通常效果一样好 井。READ_UNCOMMITTED如果两个过程不太可能碰撞,则是可以的 道路。然而,由于有呼叫创造*方法相当简短,不太可能序列 化只要数据库平台支持,就会带来问题。不过,你 可以覆盖这个设置。spring-doc.cadn.net.cn

以下示例展示了如何在 Java 中覆盖隔离级别:spring-doc.cadn.net.cn

Java 配置
@Configuration
@EnableBatchProcessing
@EnableJdbcJobRepository(isolationLevelForCreate = "ISOLATION_REPEATABLE_READ")
public class MyJobConfiguration {

   // job definition

}

以下示例展示了如何在 XML 中覆盖隔离级别:spring-doc.cadn.net.cn

XML 配置
<job-repository id="jobRepository"
                isolation-level-for-create="REPEATABLE_READ" />

如果未使用命名空间,你还必须配置 通过使用 AOP 处理存储库的交易行为。spring-doc.cadn.net.cn

以下示例展示了如何配置仓库的交易行为 在爪哇语中:spring-doc.cadn.net.cn

Java 配置
@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形式表示:spring-doc.cadn.net.cn

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(或者说整个春季)都在上班路上。spring-doc.cadn.net.cn

更改表前缀

另一个可修改的性质JobRepository是元数据的表前缀 表。默认情况下,它们都以以下形式开头批_.BATCH_JOB_EXECUTIONBATCH_STEP_EXECUTION是两个例子。不过,确实有理由需要修改这一点 前缀。如果需要将模式名称加在表名前,或者如果有多个 在同一模式内需要一组元数据表,表前缀需要 被改变。spring-doc.cadn.net.cn

以下示例展示了如何在 Java 中更改表前缀:spring-doc.cadn.net.cn

Java 配置
@Configuration
@EnableBatchProcessing
@EnableJdbcJobRepository(tablePrefix = "SYSTEM.TEST_")
public class MyJobConfiguration {

   // job definition

}

以下示例展示了如何在 XML 中更改表前缀:spring-doc.cadn.net.cn

XML 配置
<job-repository id="jobRepository"
                table-prefix="SYSTEM.TEST_" />

鉴于上述变化,每次对元数据表的查询都以系统。测试_.BATCH_JOB_EXECUTION被称为系统。TEST_JOB_EXECUTION.spring-doc.cadn.net.cn

只有表前缀可以配置。但表和列名则不然。

仓库中的非标准数据库类型

如果你使用的数据库平台不在支持的平台列表中, 如果SQL变体足够接近,可能还能使用支持的类型之一。要做 这个,你可以用RAW。JdbcJobRepositoryFactoryBean取代命名空间快捷方式和 用它来设置数据库类型,匹配最接近。spring-doc.cadn.net.cn

以下示例展示了如何使用JdbcJobRepositoryFactoryBean设置数据库类型 到爪哇最接近的匹配:spring-doc.cadn.net.cn

Java 配置
@Bean
public JobRepository jobRepository() throws Exception {
    JdbcJobRepositoryFactoryBean factory = new JdbcJobRepositoryFactoryBean();
    factory.setDataSource(dataSource);
    factory.setDatabaseType("db2");
    factory.setTransactionManager(transactionManager);
    return factory.getObject();
}

以下示例展示了如何使用JdbcJobRepositoryFactoryBean设置数据库类型 与XML中最接近的匹配点:spring-doc.cadn.net.cn

XML 配置
<bean id="jobRepository" class="org...JdbcJobRepositoryFactoryBean">
    <property name="databaseType" value="db2"/>
    <property name="dataSource" ref="dataSource"/>
</bean>

如果未指定数据库类型,则JdbcJobRepositoryFactoryBean试图 自动检测数据库类型数据来源. 平台之间的主要区别有 主要由主键递增策略来解释,因此 通常需要覆盖增量工厂也(通过使用标准 Spring 框架中的实现)。spring-doc.cadn.net.cn

如果连这些都不行,或者你没有使用关系数据库管理系统(RDBMS),那 唯一的选择可能是实现接口简易作业仓库取决于 然后用正常的Spring方式手动接线。spring-doc.cadn.net.cn