皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

Spring Batch 5.2.0-M2 现已推出!

Spring Batch 5.2.0-M2 现已推出!

我很高兴地宣布,Spring Batch 5.2 的第二个里程碑现在可以从我们的里程碑存储库中获得。这篇博文将引导您了解 Spring Batch 5.2 中的主要变化:

  • MongoDB 作业存储库支持
  • 新的无资源作业存储库
  • 复合项读取器实现
  • java.util.function API 的新适配器
  • 具有阻止队列项目读取器和写入器的并发步骤

有关更改的完整列表,请查看发行说明

MongoDB 作业存储库支持

此版本引入了第一个由 MongoDB 支持的 NoSQL 作业存储库实现。与关系作业存储库实现类似,Spring Batch 附带了一个脚本,用于在 MongoDB 中创建必要的集合,以便保存和检索批处理元数据。

此实现需要 MongoDB 版本 4 或更高版本,并且基于 Spring Data MongoDB。为了使用此作业存储库,您需要做的就是定义新添加的 :MongoTemplateMongoTransactionManagerMongoDBJobRepositoryFactoryBean

@Bean
public JobRepository jobRepository(MongoTemplate mongoTemplate, MongoTransactionManager transactionManager) throws Exception {
	MongoJobRepositoryFactoryBean jobRepositoryFactoryBean = new MongoJobRepositoryFactoryBean();
	jobRepositoryFactoryBean.setMongoOperations(mongoTemplate);
	jobRepositoryFactoryBean.setTransactionManager(transactionManager);
	jobRepositoryFactoryBean.afterPropertiesSet();
	return jobRepositoryFactoryBean.getObject();
}

定义 MongoDB 作业存储库后,您可以将其作为常规作业存储库注入任何作业或步骤中。您可以在 MongoDBJobRepositoryIntegrationTests 中找到完整的示例。

新的无资源作业存储库

在 v5 中,出于多种原因,删除了内存中基于 Map 的作业存储库实现。Spring Batch 中唯一剩下的作业存储库实现是 JDBC 实现,它需要一个数据源。虽然这与 H2 或 HSQLDB 等内存数据库配合得很好,但对于我们社区的许多用户来说,需要一个强大的限制,他们过去使用基于 Map 的存储库,而没有任何额外的依赖。

在此版本中,我们引入了一种实现,它不以任何形式(甚至不在内存中)使用或存储批量元数据。它是一个 “NoOp” 实现,丢弃批处理元数据,不与任何资源交互(因此得名 “resourceless job repository”,它以 “resourceless transaction manager” 命名)。JobRepository

此实现适用于不需要可重启性且不以任何方式涉及执行上下文的用例(例如通过执行上下文在步骤之间共享数据,或通过执行上下文在管理器和工作程序之间共享分区元数据的分区步骤等)。

此实现适用于在自己的 JVM 中执行的一次性作业。它适用于事务性步骤(例如,使用 配置)和非事务性步骤(使用 配置)。该实现不是线程安全的,不应在任何并发环境中使用。DataSourceTransactionManagerResourcelessTransactionManager

复合项读取器实现

与 和 类似,我们引入了一种新的实施,该实施旨在从具有相同格式的多个源中按顺序读取数据。当数据分布在不同的资源中并且无法编写自定义读取器时,这非常有用。CompositeItemProcessorCompositeItemWriterCompositeItemReader

A 的工作方式与其他复合工件类似,方法是按顺序将读取操作委托给常规项目读取器。下面是一个快速示例,显示了一个复合读取器,该读取器从平面文件中读取 people 数据,然后从数据库表中读取 people:CompositeItemReader

@Bean
public FlatFileItemReader<Person> itemReader1() {
    return new FlatFileItemReaderBuilder<Person>()
            .name("personFileItemReader")
            .resource(new FileSystemResource("persons.csv"))
            .delimited()
            .names("id", "name")
            .targetType(Person.class)
            .build();
}

@Bean
public JdbcCursorItemReader<Person> itemReader2() {
    String sql = "select * from persons";
    return new JdbcCursorItemReaderBuilder<Person>()
            .name("personTableItemReader")
            .dataSource(dataSource())
            .sql(sql)
            .beanRowMapper(Person.class)
            .build();
}

@Bean
public CompositeItemReader<Person> itemReader() {
    return new CompositeItemReader<>(Arrays.asList(itemReader1(), itemReader2()));
}

java.util.function API 的新适配器

与使 a 适应项处理器类似,此版本为其他接口(如 和 )引入了几个新的适配器。FucntionItemProcessorjava.util.function.Functionjava.util.functionSupplierConsumerPredicate

新添加的适配器包括: 和 .关于这些新适配器的更多细节,请参考 org.springframework.batch.item.function 包。SupplierItemReaderConsumerItemWriterPredicateFilteringItemProcessor

具有阻止队列项目读取器和写入器的并发步骤

分阶段事件驱动型架构 (SEDA) 是一种强大的架构风格,用于在由队列连接的阶段中处理数据。这种风格直接适用于数据管道,并且由于能够将作业设计为一系列步骤,因此很容易在 Spring Batch 中实现。

这里唯一缺少的部分是如何将数据读取和写入中间队列。此版本引入了项目读取器和项目写入器,用于从 .使用这两个新类,可以设计在队列中准备数据的第一步和使用同一队列中的数据的第二步。这样,这两个步骤可以同时运行,以非阻塞、事件驱动的方式高效处理数据。BlockingQueue

下一步是什么?

我要感谢所有在此版本中发挥作用的贡献者!此里程碑标志着 5.2.0 的功能冻结版本。我们将开始努力使此版本在即将到来的 5.2.0-RC1 和 11 月的 5.2.0 GA 中保持稳定。

我们期待您对 Github IssuesGithub DiscussionsTwitter 和 StackOverflow 的反馈。

请注意,5.1.x 将于 2024 年 11 月 22 日停止对 OSS 的支持。因此,我鼓励我们的用户开始计划在 Spring Batch 5.2.0 发布后立即将其应用程序升级到 Spring Batch 5.2.0。

转自 Spring Batch 5.2.0-M2 is available now!

已有 0 条评论 新浪微博
  1. 纳卫星的确了不起,大大降低了门槛,但因此带来的滥用问题及更多的太空垃圾又该如何应对?

    2013年7月16日 13:57 回复
已有 0 条评论 新浪微博
  1. 纳卫星的确了不起,大大降低了门槛,但因此带来的滥用问题及更多的太空垃圾又该如何应对?

    2013年7月16日 13:57 回复
-->