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

使现有的spring批处理应用程序在多个节点上运行

党佐
2023-03-14

我们有现有的spring批处理应用程序,我们想使它可以在多个节点上运行。

spring批处理的可伸缩性文档包括代码更改和配置更改。

我只是想知道这是否可以通过仅仅配置更改来实现(添加新的类并在配置中连接它是好的,但只是想避免对现有的类进行代码更改)。

非常感谢事先的帮助。

共有1个答案

邹弘
2023-03-14

这真的取决于你的情况。具体来说,为什么要在多个节点上运行?你试图克服的瓶颈是什么?spring批处理用于跨多个节点扩展的两种典型场景是远程分块和远程分区。这两种配置都是主/从配置,但都有不同的用例。

当一个步骤中的处理器是瓶颈时,使用远程分块。在这种情况下,主节点读取输入,并通过spring集成通道将其发送到远程节点进行处理。处理完项后,结果将返回母版进行写入。在这种情况下,读写是在本地对主机完成的。虽然这有助于并行化处理,但它需要一个I/O命中,因为每个项目都是通过有线发送的(并且需要有保证的交付,例如ala JMS)。

远程分区是另一种情况。在这种情况下,主机为每个从机生成要处理的输入的描述,并且只有该描述通过导线发送。例如,如果您正在处理数据库中的记录,则主服务器可能会向每个从服务器发送一系列行ID(1-100,101-200等)。读写发生在从机的本地,不需要保证交付(尽管在某些情况下很有用)。

根据您的用例,这两个选项都可以用最小的(或没有)新的类来完成。有几个不同的地方可以查找有关这些功能的信息:

  1. spring批处理集成Github存储库-spring批处理集成是支持上述用例的项目。您可以在这里阅读更多关于它的内容:https://github.com/spring-projects/spring-batch-admin/tree/master/spring-batch-integration
  2. 我的远程分区示例--本讲座将讨论远程分区,并提供一个运行在CloudFoundry上的工作示例(目前仅适用于CFV1,但CF2的更新将在几天后发布)。配置几乎相同,只是Rabbit的连接池不同:https://github.com/mminella/spring-batch-talk-2.0本次演示的视频可以在YouTube上找到:http://www.YouTube.com/watch?v=cytj5yt7czu
  3. Gunnar Hillert关于spring批处理和spring集成的介绍:这是在SpringOne2GX 2013上介绍的,其中包含一些示例:https://github.com/ghillert/spring-batch-integration-sample

在任何这种情况下,远程分块都可以在没有新类的情况下完成。远程分区通常需要实现一个新类(分区器)。

 类似资料:
  • 到目前为止,我正在运行spring批处理,只有一个作业。现在我想运行多个不同的作业,这意味着不同的功能。在我的配置文件中,我配置了两个具有不同id和不同名称的作业。现在我得负责这些工作。你能告诉我怎么跑吗。在这里,我的疑问是在我的java类中,我已经为运行批处理编写了这段代码。 对于其他作业,如何调用jobLauncher的run方法。 我的配置文件是

  • 我试图让原子与我的Spring Boot/Spring Batch应用程序一起工作。 以下是我代码的相关部分: 数据源配置: Atomikos自动配置依赖项: 我的application.properties代码: 这是自动配置报告: 我不知道为什么Atomikos没有自动配置。。。谁能帮忙吗? 编辑:我已经注释掉了JTA transactionManager bean,现在我得到了以下自动配置报

  • 我使用的是Spring Batch 2.1.8。释放我有一个文件,它由一些头信息和一些需要处理的记录组成。 我有一个使用面向块处理的步骤。该步骤包含ItemReader和ItemWriter的实现。ItemReader实现是线程安全的,而ItemWriter不是。 我想在处理(或写入)任何记录之前使用标题信息。在继续使用面向块的处理时,如何确保这一点? 建议的解决方案:一种解决方案可以是编写一个预

  • 我正在尝试在Tomcat上部署多个spring boot web应用程序。所有应用程序都有相同的application.properties。如何拆分在Tomcat上运行的不同应用程序的配置文件。

  • 我必须在表中的一些配置数据库中爬行。其中每个记录指定要从中读取的模式。因此,我们必须对表格进行投票,并适当地运行作业。 考虑使用Spring批处理(JdbcPagingItemReader)从所有配置的模式中读取数据。如果我必须配置它,如何使用Spring批处理? 我应该使用不同的读取器为每个数据库读取多个作业,还是有什么方法可以在运行时发送数据源以供Spring Batch读取数据? 如何为单个

  • 我有一个多Maven模块Spring Boot项目,具有以下结构: webservices和backend都是单独的Spring Boot应用程序(它们生成一个jar文件,我用它来启动它们),它们依赖于commons模块。因此,我将commons作为一个依赖项包含在webservices和后端的pom中。xml。 我对启动我的应用程序没有什么疑问。 如何在单个JVM中启动后端和webservice