当前位置: 首页 > 知识库问答 >
问题:

如何在Spring批次中使用活性剂

屠昌胤
2023-03-14

我想知道如何将spring反应应用于spring批次。我该怎么做。为什么我们要将spring Responsive应用于spring security?为什么我可以申请spring security,但我不能申请spring batch

共有1个答案

孙德宇
2023-03-14

Spring批处理的反应版本不存在。Spring开发人员正在Github上讨论这个实现。

我想指出以下解释所有原因的评论。

Spring间歇和反应流

首先,反应流是为数据流(无限)设计的,而Spring Batch是为固定数据集(有限)设计的批处理框架。在我看来,这已经是一个根本性的错误,可能会导致这两个工具之间的非自然集成。

现在,即使我们试图在Spring Batch中以某种方式引入“反应性”,我们也需要小心几个设计选择。以下摘自Spring框架常见问题部分的内容是关键:

For handlers to be fully non-blocking, you need to use reactive libraries throughout the processing chain,
all the way to the persistence layer.

Spring Framework甚至建议在堆栈部分反应时继续使用阻塞模型:

By all means, keep using Spring MVC if you are developing web apps that don't benefit from a non-blocking
programming model, or that use blocking JPA or JDBC APIs for persistence (typically in combination with
thread-bound transactions).

基于这些语句,要使web应用程序完全反应,整个堆栈应该是反应的,从控制器一直到持久层。这与批处理应用程序没有什么不同,只是我们这里显然没有控制器,但端到端作业的执行应该是被动的。使用与阻塞作业存储库交互的“反应性非阻塞步骤”是没有意义的。

因此,为了真正从这个被动故事中获益,整个框架应该是被动的,从批处理工件(阅读器、处理器、编写器、侦听器等)到基础结构bean(作业存储库、事务管理器等)。要实现这一点,需要付出巨大的努力:

  • 应提供反应式作业存储库实施
  • 所有使用PlatformTransactionManager(即BatchConfigurerTaskletStepBuilderHelper等)的API都应更新为使用新引入的组织。springframework。交易TransactionManager接口。这可以根据需要提供一个ReactiveTransactionManager或一个经典的平台TransactionManager
  • 所有读写器的实现都应该更新为使用非阻塞API(文件IO、数据库IO等)
  • 以及其他许多变化

此外,当前面向语块的处理模式实际上与反应范式不兼容。原因是ChunkOrientedTasklet在读取下一个区块之前,等待chunkProcessor(processor writer)处理整个区块:

Chunk inputs = chunkProvider.provide();
chunkProcessor.process(inputs);

因此,这种实现也应该进行调整。所有这些更改都是必需的,甚至不需要讨论Spring批处理的当前并发模型(与反应式范例不兼容)和作业存储库级别使用的乐观锁定策略。。

在我看来,“反应式支持”不是我们可以在Spring Batch中引入的功能,它实际上需要完全重写80%的框架(如果不是更多的话)。出于所有这些原因,我认为这种整合的成本/收益太高,不值得考虑,但我愿意相信其他方面。

 类似资料:
  • 按照标题,我有一个使用spring Batch在后端运行的服务。 我的服务: 作业已停止,但控制台中仍输出文本: 我不知道如何在作业停止时停止-method。我怎么做?

  • 我们正在从Oracle DB迁移到Azure SQL Server,用于我们的Spring批处理应用程序。 我断断续续地得到以下错误 错误:01.03.2022:1458(40.269)[]main]命令行JobRunner:作业因错误而终止:创建名为“dateStoreList”的bean时出错:设置bean属性“jobRepository”时无法解析对bean“jobRepository”的引

  • 问题内容: 我需要从单例中获取原型类。我发现方法注入是可行的方法,但是我真的不知道如何使用spring @Lookup注释。 我是依赖注入的新手,我选择了注释配置,因此我想朝着这个方向继续。 我发现@Lookup注释是最近才添加的(https://spring.io/blog/2014/09/04/spring- framework-4-1-ga-is-here ),但是我找不到任何方法用它。 所

  • 我想使用Batchnormalization来规范化批次维度,但keras中的批次维度自然是无维度的。那我该怎么办呢。 keras示例显示,conv2d的轴为-1,这表示通道尺寸。 轴:整数,应规格化的轴(通常是特征轴)。例如,在具有data\u format=“channels\u first”的Conv2D层之后,在BatchNormalization中设置axis=1。