将分区扩展到另一级

2024-04-29

根据下图来自春季批量文档 http://docs.spring.io/spring-batch/reference/html/scalability.html#partitioning,主步骤被划分为六个从步骤,它们是主步骤的相同副本。

我的问题是,我可以将分区扩​​展到一级或多 N 级吗?即所有六个从机都成为另外 N 个从机的主机?

使用案例:首先,我们根据主要标准对数据进行分区,然后我们进一步根据该主要标准中的其他一些标准对数据进行分区。

例如首先,我基于 N 个客户端的数据启动从站客户名称然后对于每个客户端名称,进一步根据办公地点.

可以这样做还是不支持?

EDIT:根据我的编码实验,它看起来不可行,因为StepExecutionContext问题。See this https://stackoverflow.com/questions/21112446/spring-batch-field-or-property-stepexecutioncontext-cannot-be-found and this http://forum.spring.io/forum/spring-projects/batch/105463-illegalstateexception-no-context-holder-available-for-step-scope。我们无法通过StepExecutionContext从一Step到分区上下文中的另一个。


(我应该询问更多细节,所以我的答案可能不必要地长,具体取决于您对 spring-batch 分区的理解。如果我需要使用分区,我将保留此线程)。

你总是可以从你的从属线程中生成你自己的线程,并为它们提供所需的参数,但这将完全破坏使用像 spring-batch 这样的框架的全部意义。

这不是解决您问题的直接方法:奴隶不会在这里产生其他奴隶。事实上,我认为他们不应该/可以。但是Partitionner您将通过在其 ExecutionContext 中为每个从属设备提供自己的参数(clientName 和 officeLocation)来模拟此行为,因此它们将读取/处理/写入自己的部分。


如果你不明白:

我以此为例:https://www.mkyong.com/spring-batch/spring-batch-partitioning-example/ https://www.mkyong.com/spring-batch/spring-batch-partitioning-example/所以你需要阅读才能知道我在说什么。

根据我对分区的理解,每个步骤都有自己的 ExecutionContext,在这种情况下,您将输入特定于每个从属设备的参数。您需要创建一个分区程序,为每个从属设备的 gridSize 设置特定值。

在 Mkyong 的示例中,他将 gridSize 的值设置为 10,这意味着他将有 10 个线程。他知道他将从 1 到 100,因此他为每个线程设置数据库值匹配:

for `thread1`, fromId:1 toId:10, 
for `thread2`, fromId:11 toId:20, 
for `thread3`, fromId:21 toId:30, 
etc.

他将这些值设置在ExecutionContext,因此每个读取器/处理器/写入器都会获得自己的处理价值(选择来自fromIdto toId,所以每个选择都有它自己的部分)。如果他愿意,他可以做一些更动态的事情:在Partitionner并改变toId and fromId取决于尺寸。它是高度可定制的。

对于你的情况,就像你必须处理两个参数(这里只是 id),而且它们不是数字。假设你只有clientName,如果您为分区程序提供这些客户端名称的列表(或数组),则只需生成一个ExecutionContext per clientName并设置它。如果你有两个参数,你可以使用更复杂的结构,比如List of Client类(当然,每个Client have a clientName参数和 String 列表officeLocations)。现在,您将创建一个ExecutionContext per clientName per officeLocation每个读者都会从它的ExecutionContext中得到什么clientName and officeLocation选择它们。

例如,如果您有 3 个客户端,每个客户端有 2 个位置,那么您最终将得到 6 个 ExecutionContext(因此,6 个从属/线程)。然后,在你的Reader您只需从以下位置检索 clientName 和 officeNameExecutionContext并使用它们来选择您的实体(来自数据库或其他)。

创建具有 OfficeName 的客户列表可以在上一步中完成,并在工作上下文中设置为可在整个工作中访问。如果 gridSize 需要与 Spring Batch 创建的线程数相同,您可以在创建客户端列表的同时计算它并以相同的方式设置它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将分区扩展到另一级 的相关文章

随机推荐

  • 如何使用jsp上传服务器文件夹上的文件[重复]

    这个问题在这里已经有答案了 我正在尝试使用 servlet jsp 将一些图像上传到位于我的服务器上的文件夹中 下面是我的代码 它在我的本地计算机上运行 import java io import java util import java
  • 使用 SSIS 将数据从 Oracle 导入到 SQL Server 时出现代码页错误

    我在 SSIS 包中的 OLEDB 源上收到以下警告 警告 1 验证警告 数据流任务 20582F6F DD9C 45F5 8727 992F525E67DC 无法检索该列 来自 OLE DB 提供程序的代码页信息 如果组件支持 Defau
  • Google Adsense 中的 Javascript 错误

    在我的几个运行 AdSense 的网站上 我收到以下错误 无法将消息发布到 http googleads g doubleclick net http 5Dgoogleads g doubleclick net 收件人有来源http www
  • 系统调用:sys_exit()、SYS_exit 和 exit() 之间的区别

    SYS exit sys exit 和 exit 之间有什么区别 我的理解是 Linux内核提供了系统调用 这些调用在man 2 syscalls 这些系统调用的包装函数由glibc它们的名称与系统调用大多相似 我的问题 在man 2 sy
  • 如何在 JavaScript 中通过方括号访问私有字段

    这段代码的工作原理 class Test field get field return this field 但如果我想计算字段名称我必须使用方括号 但它不起作用 class Test field get field return this
  • 项目未出现在“gcloud 项目列表”中

    我在 Google Cloud 控制台中添加了一个项目 但使用 gcloud SDK gcloud 项目列表 未显示该项目 我是在做一些愚蠢的事情还是我错过了什么 Edit 您是否为新帐户使用不同的凭据 否 该帐户是在控制台和sdk控制台上
  • 用户在对话框中输入

    python 中是否有任何库可用于图形用户输入 我知道关于tk但我相信需要一些代码才能做到这一点 我正在寻找最短的解决方案 a input Enter your string here 取而代之的是 我想要一个对话框 以便用户可以在那里输入
  • 什么是好的规格? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 中的一项乔尔测试 http www joelonsoftware com articles fog0000000043 html是一个
  • 如何在 SSRS 中将多个值传递给多值参数

    我将通过过度简化报告结构来尽力解释这个问题 第一份报告包含 1 个名为 资源中心 的组 然后在其下包含一行总计 总计实际上是一个组 但分组是在 SQL 中完成的 并显示在详细信息组中 该报告看起来像这样 Report 1 ResourceC
  • 清除 Laravel 队列缓存而不重新启动

    在我的应用程序中 每个客户都有一种复杂的类 我们在其中为该特定客户进行一些搜索和替换 我运行队列工作人员每天与 eBay 同步 以便每个客户进行某种搜索和替换 问题是 Laravel 队列会缓存代码很长一段时间 如果我想去更改任何客户类文件
  • 如何使用 Javascript 更改具有相同类名的多个元素?

    跟进至我之前的问题 https stackoverflow com q 42389937 2803565 我想使用 JS 使用按钮来显示 隐藏具有相同类名的多个元素 但似乎我只能更改具有特定类名的第一个元素 并且页面上具有相同类名的所有其他
  • Android - 如何创建布局选择器(如 ImageButton 选择器)

    我有一个 ImageButton 和一个包裹该按钮的 LinearLayout 如下所示
  • Rxjava 中“背压”一词是什么意思?

    我是 RxJava 的初学者 我很好奇 背压 这是否意味着生产者在背后给消费者施压 或者这是否意味着消费者正在向生产者施加压力 反方向施压 RxJava 背压 当你有一个 observable 发射物品的速度太快 以至于消费者无法跟上流量
  • 循环遍历类为“blah”的所有元素并找到最高的 id 值

    我有很多元素 例如 div class blah div 我想循环遍历所有这些并获得最高的 ID 即 123 这个怎么做 以下是正确的和最好的方法吗 blah each function var id this attr id split
  • 在 Windows 应用商店应用程序中进行模拟

    我可能不是第一个出于测试目的而在 Windows 商店应用程序中处理模拟的人 我想测试我的 ViewModel 并使用一些模拟框架来模拟它们 当然 所有可用的 通用 框架都不能在 Windows 应用商店应用程序项目中使用 我有一个想法如何
  • 返回“application/xml”而不是“text/plain”ASP.NET Core Web API

    我有一个 XML 字符串 我需要将其作为 XML 文档返回 默认情况下 返回的内容类型为text plain 内容已呈现 但我需要内容类型application xml 我启用了 RespectBrowserAcceptHeader 选项
  • C++ 是否可以延迟常量静态成员的初始化?

    我正在使用 Qt 但这是一个通用的 C 问题 我的情况很简单 我有一个课程Constants它有一个常量静态成员 我希望在进行某些函数调用后对其进行初始化 常量 h ifndef CONSTANTS H define CONSTANTS H
  • iPhone 上 NSString 的 AES 加密

    任何人都可以为我指明正确的方向 以便能够加密字符串 并返回带有加密数据的另一个字符串吗 我一直在尝试使用 AES256 加密 我想编写一种需要两个 NSString 实例的方法 一个是要加密的消息 另一个是用于加密它的 密码 我怀疑我必须生
  • 读取 C/C++ 的 EOF

    我正在使用 NetBeans MinGW 编译简单的 C 程序 我是新手 我的问题是我有这个简单的代码 include
  • 将分区扩展到另一级

    根据下图来自春季批量文档 http docs spring io spring batch reference html scalability html partitioning 主步骤被划分为六个从步骤 它们是主步骤的相同副本 我的问题