当前位置: 首页 > 面试题库 >

弹簧间歇流/一步后分流

贺海
2023-03-14
问题内容

我正在构建一个包含以下过程的spring-batch解决方案:

步骤1:将列表分为多个列表步骤2:处理每个子列表步骤3:合并子列表

生成的子列表可以并行处理,并且根据spring-batch文档支持。可悲的是,我只能找到以并行步骤开始的spring-
batch示例作业,而不是顺序开始的示例。

以下作业将无法编译。Spring给我一个错误:“无法解决step2”

<batch:job id="webServiceJob2">
    <batch:step id="step1" next="step2"></batch:step>
    <batch:split id="step2" next="step3"></batch:split>
    <batch:step id="step3"></batch:step>
</batch:job>

那么,如何配置作业以首先运行一个步骤,而不是并行运行多个步骤,然后运行最后一个步骤?


问题答案:

我偶然发现了这个问题,询问拆分的工作原理,也许这个答案迟到了(一年),但是我去了…

这里存在“拆分”的问题本身并不是一个步骤,而是您按原样命名(并引用)它:

<batch:job id="webServiceJob2">
    <batch:step id="step1" next="step2"></batch:step>
    <batch:split id="step2" next="step3"></batch:split> <!-- This is not a step -->
    <batch:step id="step3"></batch:step>
</batch:job>

正确的语法为:

<batch:job id="webServiceJob2">
    <batch:step id="step1" next="step2"></batch:step>
    <batch:split id="split_step2" next="step3">
        <flow> 
             <step id="step2_A_1" ... next="step2_A_2"/>
             <step id="step2_A_2" ... />
        </flow>
        <flow> 
             <step id="step2_B_1" ... />
        </flow>
    </batch:split>
    <batch:step id="step3"></batch:step>
</batch:job>

但这不是您想要实现的,因为通过split声明,您必须在编译时设置将要执行的并行步骤的确切数量,并且分割的目的是在每个流中使用不同的步骤,而不是多次调用相同的步骤。

您应该查看有关扩展和并行流程的文档, 分区步骤
似乎是满足您要求的一个不错的选择。



 类似资料:
  • 那么,如何将作业配置为先运行单个步骤,然后并行运行多个步骤,然后运行最后一个步骤呢?

  • 我在spring batch中有一份工作,包括一个阅读器、一个处理器和一个写入器。 首先,我想知道这3个组件以什么顺序运行:它们是顺序的(对于commit-interval=1)还是在写入前一个项目之前读取新项目以避免延迟? 我对此很感兴趣,因为我有以下案例: 我想有一条“装配线”:读- 这意味着在写入前一项之前不读取任何内容。 这东西已经开箱即用了吗?如果没有,我怎么能完成这样的事情?

  • 问题内容: 如何使用和在一起? personelRepository.java personelService.java personelController.java 当我运行它时,会出现这样的错误。但是,如果我像findAll(Pageable page)和findAll(Specification filter)一样分别调用findAll()函数,它将起作用。但是我不能一起使用。 问题答案:

  • 问题内容: 我到处都读到有关Spring如何鼓励您在代码中使用接口的信息。我没看到 您的spring xml配置中没有接口的概念。Spring的哪一部分实际上鼓励您使用接口(而不是文档)? 问题答案: 为类定义接口时,它有助于进行依赖项注入。您的Spring配置文件本身不包含任何有关接口的信息-您只需输入类的名称即可。 但是,如果您要注入另一个提供“等效”功能的类,则使用接口确实会有所帮助。 例如

  • 问题内容: 我处理遗留代码库,其中未在春天有线了一类需要获得一类 是 在春季接线。我希望创建一个在启动时已连接的工厂类,然后可以调用getInstance()方法来获取一个连接对象。最好的方法是什么? 例: 我需要在启动时连接FooFactory,以便LegacyA可以简单地调用getInstance(),以便它返回Foo的实例(这也是在应用程序上下文中定义的bean)。 编辑:我不得不重新整理我

  • 问题内容: 我有一个Web应用程序,这里有一个典型的问题,即针对不同环境需要不同的配置文件。某些配置作为JNDI数据源放置在应用程序服务器中,但是某些配置保留在属性文件中。 因此,我想使用Spring配置文件功能。 我的问题是我没有运行测试用例。 context.xml: 测试: 问题似乎是无法解析用于加载配置文件的变量: 当前配置文件应使用注释设置。由于这是一个测试用例,因此我将无法使用。如果可