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

spring批处理中是否可以嵌套块

萧业
2023-03-14

嗨,我是新春批。

我有如下Spring批次的情况:

我需要运行所有促销的批处理[促销列表]

>

在这里,我想再次从batch中读取上面的动态查询,因为它返回的结果至少为5万条记录。

以下是我所期待的过程,这在Spring批次中是否可行?

  • 阅读促销【读者逐一阅读促销】
    • 创建查询并将其放在上下文中
    • 传递给下一个读者
      • 读取器逐个读取事务
      • 处理交易并计算积分

      我这里的问题是不能写嵌套块[一个用于读取提升,一个用于读取事务]。

      一个备选办法是:

      为每个促销活动分区作业,在这种情况下,所有促销活动将同时运行,但我们需要一个接一个地运行。

      有人能提出任何解决办法吗?

共有1个答案

钦德佑
2023-03-14

你不能有嵌套块,这样你就可以编写自己的CompositeItemReader,比如(伪代码):

class CompositeItemReader implements ItemReader<Transaction> {
  ItemReader<Promotion> promotions;
  ItemReader<Transaction> transactions;

  public void setPromotions(ItemReader<Promotion> promotions) {...}

  public Transaction read() {
    Transaction item = transactions.read();
    if(null == item) {
      Promotion p = promotions.read();
      if(null != p) {
        // Close transactions reader, create dynamic query and open transaction reader
        // Re-read item!
        item = this.read();
      }
    }

   return item;
  }
}

但是记住将促销和交易注册为流,并记住管理可重启性。
或者,如果您确定每个促销活动都有一个有限的列表

class PromotionProcessor implements ItemProcessor<Promotion,List<Transaction>> {
  public List<Transaction> process(Promotion item) {
    Query q = <create dynamic query>;
    return q.list();
  }
}

还有一个基于PeekableItemReader和data holder的解决方案,如本文所述

希望这些考虑能有所帮助!干得好

 类似资料:
  • 我读过spring batch中的分区,我发现了一个演示分区的示例。该示例从CSV文件中读取人员,进行一些处理,并将数据插入数据库。在本例中,1 partitioning=1 file,因此partitioner实现如下所示: 但如果我有一个10TB的文件呢?spring批处理是否允许以某种方式对其进行分区? 我尝试了以下方法来实现我的目标: 分为两步——第一步将文件分成若干部分,第二步处理第一步

  • 我正在处理许多没有固定头/列的CSV文件,说我可以得到file1。包含10列和文件2的csv。csv包含50列。 我无法提前知道我将拥有的列数,我无法为每种文件类型创建特定的作业,我的输入将是一个黑框:一堆CSV,它将具有从10到无限的X列数。 当我想使用Spring Batch自动导入这些CSV时,我想知道这是否可能?我知道我必须获得固定数量的列,因为处理器以及我需要将数据序列化为POJO然后再

  • 我正在使用一个相当大的数据集(大约500Mio-Triples)存储在图形数据库免费并在我的本地开发人员机器上运行。 我想用RDF4J对数据集执行一些操作,并且必须或多或少地选择整个数据集。要进行测试,我只需选择所需的元组。代码在第一个一百万元组中运行良好,之后由于graphDB继续分配更多的RAM,速度变得非常慢。 是否有可能对非常大的数据集执行选择查询并批量获取它们? 基本上,我只想通过一些选

  • 现在我正在用Apache Kafka做一些测试。在Kafka生产者的配置中,参数batch.size和linger.ms控制批处理策略。是否可以在生产的同时动态地制作这些参数?例如。如果数据摄取率上升很快,我们可能希望增加batch.size以每批积累更多的消息。我没有找到任何动态批处理与Kafka生产者的例子。有没有可能实施?

  • 问题内容: 我正在尝试在Spark中实现K最近邻算法。我想知道是否可以使用嵌套的RDD。这将使我的生活更加轻松。考虑以下代码片段。 目前,此嵌套设置出现错误(我可以在此处发布完整日志)。可以放拳头吗?谢谢 问题答案: 不,这是不可能的,因为RDD的项必须可序列化,而RDD不可序列化。这是有道理的,否则您可能会通过网络传输整个RDD,如果其中包含大量数据,这将是一个问题。如果它不包含很多数据,则可能

  • 一段时间以来,我一直在寻找解决spring batch问题的方法。我应该使用spring batch从csv文件复制/创建新的csv文件。这里有一个例子: 下面是一个创建输出编号1的示例,例如File1: 其他输出文件也是一样的,但是你可以看到一些输出使用相同的源,事实上,我不能读取相同的数据两次来重新生成一个新的输出,所以我尝试将它们作为资源存储在地图上(资源将被使用不止一个),也就是说,我将