gpt4 book ai didi

数据列表中每个项目的 Spring Batch-Repeat 步骤

转载 作者:行者123 更新时间:2023-12-01 07:42:43 24 4
gpt4 key购买 nike

这是一个艰难的过程,但我相信它并非闻所未闻。

我有两个数据集,国家和人口统计。国家数据集包含国家名称和其人口统计数据的 ID。

人口统计数据集是从国家到郊区的分层数据集。

这两个数据集都是每周从第 3 方提取的。

我需要将人口统计数据分成文件,每个国家/地区一个。

到目前为止,我的步骤是
1) 拉动国家
2) 拉动人口统计
3)(这是必需的)循环调用“将国家人口统计数据写入文件”的国家数据集

是否有可能以某种方式重复通过当前国家/地区ID的步骤?

编辑:添加了 PartitionHandler 示例的链接

谢谢杰布里斯托。下面的链接显示了使用 JavaTask 对象的 addArgument 覆盖 PartitionHandler 来传递参数的用法,但它看起来像开发人员的大量繁重工作,而不是 Spring 批处理的目标“特定于业务问题”。
http://www.activeeon.com/blog/all/integration/distribute-a-spring-batch-job-on-the-proactive-scheduler

我还在您的原始链接第 7.4.3 节中看到了。将输入数据绑定(bind)到步骤这是在 7.4.2 的上下文中。分区器,这个看起来很刺激

<bean id="itemReader" scope="step"
class="org.spr...MultiResourceItemReader">
<property name="resource" value="#{stepExecutionContext[fileName]}/*"/>
</bean>

我不认为有人在玩这个的一些示例 XML 配置吗?
  • 分区器
  • 将动态值传递给分区内的步骤

  • 提前致谢。

    最佳答案

    是的,看看 spring-batch 的分区功能! http://static.springsource.org/spring-batch/reference/html-single/index.html#partitioning

    基本上,它允许您使用“分区器”来创建新的执行上下文以传递给处理程序,然后处理程序对该信息进行处理。

    虽然分区是为并行化而设计的,但其默认并发数为 1,因此您可以从小处着手,然后逐步提高以匹配您可以使用的硬件。由于我假设每个国家/地区的数据不依赖于其他国家/地区(至少在下载人口统计步骤中),因此您的工作可以利用基本的并行化。

    /编辑:添加示例。

    这是我所做的(或多或少):
    首先,XML:

    <beans>
    <batch:job id="jobName">
    <batch:step id="innerStep.master">
    <batch:partition partitioner="myPartitioner" step="innerStep"/>
    </batch:step>
    </batch:job>
    <bean id="myPartitioner" class="org.lapseda.MyPartitioner" scope="step">
    <property name="jdbcTemplate" ref="jdbcTemplate"/>
    <property name="runDate" value="#{jobExecutionContext['runDate']}"/>
    <property name="recurrenceId" value="D"/>
    </bean>
    <batch:step id="summaryDetailsReportStep">
    <batch:tasklet>
    <batch:chunk reader="someReader" processor="someProcessor" writer="someWriter" commit-interval="10"/>
    </batch:tasklet>
    </batch:step>
    </beans>

    现在一些Java:
    public class MyPartitioner implements Partitioner {
    @Override
    public Map<String, ExecutionContext> partition(int gridSize) {
    List<String> list = getValuesToRunOver();
    /* I use treemap because my partitions are ordered, hashmap should work if order isn't important */
    Map<String, ExecutionContext> out = new TreeMap<String, ExecutionContext>();
    for (String item : list) {
    ExecutionContext context = new ExecutionContext();
    context.put("key", "value"); // add your own stuff!
    out.put("innerStep"+item, context);
    }
    return out;
    }
    }

    然后,您只需从上下文中读取,就像从步骤中的正常步骤或工作上下文中读取一样。

    关于数据列表中每个项目的 Spring Batch-Repeat 步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10530652/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com