spring-batch (java-config) 使用 JobExecutionDecider 识别和执行步骤

2024-03-14

我有 3 个步骤 A、B、C,应按 A->B->C 的顺序执行,其中 B 是可选的。我必须仅根据某些条件执行步骤 B。我使用 JobExecutionDecider 来决定如下:

@Bean(name = "decider")
JobExecutionDecider isStepRequired {
    return new JobExecutionDecider() {
        @Override
        public FlowExecutionStatus decide(final JobExecution jobExecution, final StepExecution stepExecution) {
            if (condition not satisfied) {
                // return status to skip step B and go to step C
                return FlowExecutionStatus.COMPLETED;
            }
            // return status to proceed with step B
            return new FlowExecutionStatus("CONTINUE");
        }
    };
}

在作业配置中,我有以下代码片段,

@Bean
Job constructJob(final JobBuilderFactory jobs, final Step a, final Step b, final JobExecutionDecider decider, final Step c) {
    final JobBuilder jobBuilder = jobs.get("Job");
    final JobFlowBuilder builder = jobBuilder.flow(a);
    builder.from(a).next(decider);
    builder.from(decider).on("CONTINUE").to(b).next(c);
    builder.from(decider).on("*").to(c);
    return builder.build().build();

上面提到的代码正在按我的预期工作。但我不确定这是否是正确的做法。基本上我期待一种不重复步骤 C 执行的方法。

我确实遇到过 SimpleAsyncTaskExecutor,但我知道它用于我们需要进行并行处理的场景,在我的情况下,如果条件满足,我只需要执行一个步骤。

我的问题是 1.使用SimpleAsyncTaskExecutor可以达到我想要的效果吗?有没有使用注释使用 SimpleAsyncTaskExecutor 的示例? 2.还有其他更好的方法可以避免上述重复吗?

非常感谢任何帮助!

提前致谢, 迪内什·库马尔·P


我不确定你的代码如何正常工作 - 在我看来builder.from(decider).on("*").to(c);将为步骤 C 创建重复的执行。

STEP - A 完成执行后(无论状态如何),调用决策程序,如果决策程序返回CONTINUE- 您执行STEP-B,然后执行STEP-C。如果那个决策者没有返回CONTINUE, STEP-C 仍然被执行,因为它在 - 行中没有条件builder.from(decider).on("CONTINUE").to(b).next(c);

因此 STEP - C 已经执行,然后您再次调用决策程序并按照行再次执行 STEP - C -builder.from(decider).on("*").to(c);。你还必须注意到final StepExecution stepExecution这次调用决策程序时,参数将是步骤 C,而不是步骤 - B。

如果我误解了什么,请告诉我。

Also - SimpleAsyncTaskExecutor并不是为了建立工作流程。其目的是当您尝试并行执行块或尝试并行执行分区步骤时,在您的作业中引入多线程/并行处理。

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

spring-batch (java-config) 使用 JobExecutionDecider 识别和执行步骤 的相关文章

随机推荐

  • 正则表达式从捕获中排除匹配项

    在 Net 中使用正则表达式 我将有一组类似这样的数据 lt Bunch o Data Here gt where lt 只是新记录的指标 gt 是记录的结尾 这些记录可能会像这样出现 lt Dataset 1 gt
  • C++ 矢量数学和 OpenGL 兼容

    我一直在做很多矢量数学的工作 并为其编写了自己的模板 我的要求是大量的向量数学 加法 减法 缩放 叉乘和点积 而且我需要能够将我的向量作为 float 传递 以便 openGL 可以使用它 我已经很高兴地使用这个有一段时间了 今天一位讲师看
  • Codeigniter:如何获取文件的文件名

    我是 Codeigniter 新手 我正在尝试获取上传图像的文件名 以便将其保存在数据库中 我有两个模型 homemodel 处理我的数据库 image upload model 处理图像上传 一切正常 除了我不知道如何将图像文件名发布到数
  • 如何在 Xcode 5 中的 Storyboard 上抑制约束和布局警告?

    是否有任何标志可以抑制 Xcode 5 中故事板的不明确布局或错误放置的视图 我在代码中添加约束 并且只是使用 Interfacebuilder 中的视图作为虚拟对象 我不想应用 Xcode Resolve 自动布局问题 因为我很高兴视图在
  • 当我登录 Azure 门户时,Azure Function 计时器运行两次

    我在 Azure 中有一个定时函数应用程序 计划在每天 22 00 运行 然而 它似乎每天都在 21 59 和 22 00 运行 当我登录 Azure 门户检查日志时 它似乎也是随机运行的 以下是我收到的重复条目的时间戳示例 我在网上搜索过
  • ASP.Net MVC 应该为每个视图创建一个模型吗?

    我对 ASP Net MVC 相当陌生 我发现自己为每个视图制作一个模型类 例如 SignInModel SignUpModel EditProfileModel 等 其中许多都有些相似 具有相同的数据库文件 然后还有一些自定义属性 这真的
  • PyInstaller 无缓冲 stdio

    Problem Docker 镜像大小通常应尽可能小 使用成熟的环境 例如标准蟒蛇 https hub docker com python 安装了所有依赖项后 图像通常会导致图像严重膨胀 将 python 打包成独立的可执行文件 例如使用
  • c# MVC 站点地图 - 使用角色时非常慢 - 非常慢

    我已经安装了适用于 MVC5 的 MVC 站点地图提供程序 并且使用了开箱即用的所有内容 效果很好 现在我想实现基于角色的菜单修剪 所以假设我的控制器 public class Home Controller Authorize Roles
  • 如何调试“请求的资源上不存在‘Access-Control-Allow-Origin’标头”

    我在浏览器控制台上显示此错误 XMLHttpRequest 无法加载http localhost 8080 api 登录 http localhost 8080 api login 请求的资源上不存在 Access Control Allo
  • 当 DOM“准备好”时运行 JavaScript 函数?

    我正在使用 JavaScript 上传脚本 该脚本表示一旦 DOM 准备好就运行初始化函数 我目前可以通过调用该函数来使其正常工作body onload或者直接在函数定义之后 该函数在占位符 div 中构建一些 HTML 充当文件上传工具
  • 向 NSImageView 添加阴影

    我有一个NSImageView并想添加阴影 我尝试过以编程方式执行此操作 NSShadow shadow NSShadow alloc init autorelease shadow setShadowBlurRadius 4 0f sha
  • 打印不带括号的 Numpy 数组

    predictions x6 x5 x4 x3 x2 x1 predictions 调用上面的列表会产生以下数组 array 782 36739152 array 783 31415872 array 726 90474426 array
  • 在单元测试中模拟 Spark RDD

    是否可以在不使用sparkContext的情况下模拟RDD 我想对以下实用函数进行单元测试 def myUtilityFunction data1 org apache spark rdd RDD myClass1 data2 org ap
  • 如何使用 CSS 创建对角线背景效果

    是否可以使用 CSS 创建如下图所示的效果 基本上我想创建 div 背景对角线分割 一侧为块色 另一侧为白色 您可以使用linear gradient on background 请参见以下示例 body height 100vh widt
  • C语言中localtime的结果结构体是如何分配的?

    我正在玩time hC 语言文件可以帮助我们处理时间 日期函数 我碰到 struct tm Cdecl localtime const time t timer 这似乎返回一个指向 tm 结构的指针 我发现按地址返回主要用于返回新的内存分配
  • 导入错误未定义符号(python 中的 C++ 模块)ZTINSt8ios_base7failureB5cxx11E

    我知道网站上有很多类似的问题 但我找不到问题的答案 我使用 Cython 包装 C 类 以便将它们与 Python3 一起使用 使用以下命令构建外部模块后setup py 当我运行 python 程序时 出现以下错误 from name o
  • MYSQL - 选择两个表中行数的差异

    我正在尝试比较两个数据库中两个表的行数 行数应该相同 SELECT 从 db1 table1 中选择 COUNT 从 db2 table1 中选择 COUNT AS差异 仅当差异 0 时如何选择 我需要为多个表运行此命令 并且不需要 0 值
  • R RegEx:匹配方括号内的所有双引号 (") 字符

    我正在努力获取匹配所有双引号字符的正则表达式 出现在方括号内 我有不同的部分可以完成我想要的部分功能 例如 gsub xyz 1 xyz 将得到所有双引号 无论其他什么 gsub xyz abc 1 abc 将把所有内容放在两个方括号内 包
  • 如何将 HashLocationStrategy 与 Auth0 Lock 小部件结合使用以进行用户登录

    更新后Auth0登录示例 https github com auth0 samples auth0 angular samples tree master 01 Login to use HashLocationStrategy in ap
  • spring-batch (java-config) 使用 JobExecutionDecider 识别和执行步骤

    我有 3 个步骤 A B C 应按 A gt B gt C 的顺序执行 其中 B 是可选的 我必须仅根据某些条件执行步骤 B 我使用 JobExecutionDecider 来决定如下 Bean name decider JobExecut