- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如下图所示 Spring Batch Doc ,主步骤被划分为六个从步骤,它们是主步骤的相同副本。
我的问题是,我可以将分区扩展到一级或多 N 级吗?即所有六个从机都成为另外 N 个从机的主机?
用例:首先,我们根据主要标准对数据进行分区,然后我们进一步根据该主要标准中的其他一些标准对数据进行分区。
例如首先,我根据客户名称为N个客户的数据启动从属服务器,然后针对每个客户名称,进一步根据办公地点对数据进行分区。
可以这样做还是不支持?
编辑:根据我的编码实验,由于 StepExecutionContext
问题,它看起来不可行。 See this和 this 。我们无法在分区上下文中将 StepExecutionContext
从一个 Step
传递到另一个。
最佳答案
(我应该询问更多细节,所以我的答案可能不必要地长,具体取决于您对 spring-batch 分区的理解。如果我需要使用分区,我将保留此线程)。
你总是可以从你的从属线程中生成你自己的线程,并为它们提供所需的参数,但这将完全破坏使用像 spring-batch 这样的框架的全部意义。
这不是解决您问题的直接方法:奴隶不会在这里产生其他奴隶。事实上,我认为他们不应该/可以。但是您创建的 Partitionner 将通过在 ExecutionContext 中为每个从属设备提供自己的参数(clientName 和 officeLocation)来模拟此行为,因此它们将读取/处理/写入自己的部分。
<小时/>如果你不明白:
我以此为例: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 中设置这些值,因此每个读取器/处理器/编写器都会获得自己的处理值(选择从 fromId
到 toId
,所以每个选择都有它自己的部分)。如果他愿意,他可以做一些更动态的事情:在 Partitionner
中设置数据库的 id 总数,并更改 toId
和 fromId
> 取决于尺寸。它是高度可定制的。
对于你的情况,就像你必须处理两个参数(这里只是 id),而且它们不是数字。假设您只有 clientName
,如果您为 Partitionner 提供这些客户端名称的列表(或数组),则只需为每个 生成一个
并设置它。如果您有两个参数,则可以使用更复杂的结构,例如 ExecutionContext
clientNameClient
类的 List
(当然,每个参数Client
有一个clientName
参数和一个字符串officeLocations
列表)。现在,您将为每个 officeLocation
的每个 clientName
创建一个 ExecutionContext
。每个读者将从其 ExecutionContext 中获取 clientName
和 officeLocation
来选择它们。
例如,如果您有 3 个客户端,每个客户端有 2 个位置,那么您最终将得到 6 个 ExecutionContext(因此,6 个从属/线程)。然后,在您的 Reader 上,您只需从 ExecutionContext 中检索 clientName 和 officeName 并使用它们来选择您的实体(来自数据库或其他)。
可以在上一步中创建具有 OfficeName 的客户列表,并在作业上下文中设置为可在整个作业中访问。如果 gridSize 需要与 Spring Batch 创建的线程数相同,您可以在创建客户端列表的同时计算它并以相同的方式设置。
关于java - 将分区扩展至多一级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39901207/
我在这里遇到了一个对我来说很奇怪的问题,我故意更改了我的程序以使其使用动态内存,因为我之前遇到过堆栈错误。内存密集型部分已更改为动态,但我仍然遇到堆栈溢出,虽然我预计会发生堆溢出,但我有足够的 RAM
我有一个在 PHP 中动态构建的查询,它使用一组连接在一起的子查询来选择对象值的不同组合...例如,给定值表: [object_id] [value_id] 99 1 9
我是一名优秀的程序员,十分优秀!