JSR 352:如何从分区步骤的每个分区的写入器收集数据?

2023-12-28

因此,我在写入数据库的步骤中有 2 个分区。我想记录每个分区写入的行数,得到总和,打印到日志中;

我正在考虑使用staticWriter 中的变量并使用 Step Context/Job Context 获取它afterStep()步骤监听器的。然而当我尝试时我得到了null。我能够得到这些值close()读者的。

这是正确的做法吗?或者我应该使用分区收集器/减速器/分析器?

我在 Websphere Liberty 中使用 java 批处理。我正在 Eclipse 中开发。


我正在考虑在 Writer 中使用静态变量,并使用 Step Context/Job Context 将其获取到 Step Listener 的 afterStep() 中。然而,当我尝试它时,我得到了空。

The 项目编写器此时可能已经被摧毁了,但我不确定。

这是正确的做法吗?

是的,应该足够好了。但是,您需要确保所有分区共享总行数,因为批处理运行时维护步骤上下文每个分区克隆。你应该使用JobContext.

我认为使用分区收集器 and 分区分析器也是一个不错的选择。界面分区收集器有一个方法collectPartitionData()收集来自其分区的数据。收集后,批处理运行时会将这些数据传递给分区分析器来分析数据。请注意,有

  • 每步 N 个 PartitionCollector(每个分区 1 个)
  • 每步 N 个 StepContext(每个分区 1 个)
  • 每步 1 个分区分析器

写入的记录可以通过步骤上下文's transientUserData。自从步骤上下文为其自己的步进分区保留,临时用户数据不会被其他分区覆盖。


这是实现:

我的项目编写者 :

@Inject
private StepContext stepContext;

@Override
public void writeItems(List<Object> items) throws Exception {
    // ...
    Object userData = stepContext.getTransientUserData();
    stepContext.setTransientUserData(partRowCount);
}

我的分区收集器

@Inject
private StepContext stepContext;

@Override
public Serializable collectPartitionData() throws Exception {

    // get transient user data
    Object userData = stepContext.getTransientUserData();
    int partRowCount = userData != null ? (int) userData : 0;
    return partRowCount;
}

我的分区分析器

private int rowCount = 0;

@Override
public void analyzeCollectorData(Serializable fromCollector) throws Exception {
    rowCount += (int) fromCollector;
    System.out.printf("%d rows processed (all partitions).%n", rowCount);
}

参考 :JSR352 v1.0 最终版本.pdf https://java.net/downloads/jbatch/JSR%20352%20v1.0%20Final%20Release.pdf

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

JSR 352:如何从分区步骤的每个分区的写入器收集数据? 的相关文章

  • viewDidLoad 中的边界和帧大小

    我推了一个视图控制器 mainVC 并向其添加一些子视图 大多数这些视图都是在用户采取某些操作时按需构建的 当我构建每个视图时 我参考mainVC view bounds调整视图大小 根据需求大小构建的就很好 但是第一个 我添加到viewD
  • 立即构建一个工具,以便稍后在同一 CMake 运行中使用它

    我有一个有趣的先有鸡还是先有蛋的问题以及一个潜在的解决方案 请参阅我发布的答案 但该解决方案以一种不寻常的方式使用 CMake 欢迎更好的替代方案或评论 问题 该问题的简单版本可以描述为具有以下特征的单个 CMake 项目 构建目标之一是一
  • 创建对象的静态方法而不是构造函数

    我正在我的 C 应用程序中创建一个 GUI 并且有一个名为GUIObject这是所有其他组件的基类 例如Button CheckBox Window etc 我也有课GUIObjectsStorage 其中包含所有GUIObject被创建的
  • Facebook“publish_actions”权限

    当 Facebook 删除 publish actions 权限时 我无法在用户时间轴上发布任何内容 如果可以 如何在用户时间线上上传视频 或者如何使用 Graph API v2 12 查看 publish actions 权限 2018年
  • 为什么使用Android Room时没有创建数据库文件?

    我在 Android 应用程序中使用 Room Persistence Library 但在创建后 我在设备上找不到包含表的 sql 文件 当我通过创建数据库时SQLiteOpenHelper我可以看到文件夹中的所有表格data在设备上 但
  • 尝试使用多个条件对 Excel 中的单元格进行计数

    正如标题所述 我试图在单独的工作表上计算单元格范围 但似乎无法让它工作 任何帮助将不胜感激 COUNTIFS MONTH original A2 A58 1 original D2 D58 East 问题是Month 部分在你的公式中 我理
  • Python 中的 for 循环

    在 C C 中 我可以有以下循环 for int k 1 k lt c k 2 如何在 Python 中做同样的事情 我可以做这个 for k in range 1 c 在 Python 中 这与 for int k 1 k lt c k
  • MS Access 中存在超过 1 个左连接的问题

    这与我之前的问题有关MS Access 中存在超过 1 个左连接 https stackoverflow com questions 1057167 more than 1 left joins in msaccess 问题是我有 3 个左
  • 在 Rails 应用程序中使用 rmagick 时出错

    尝试运行 Rails 应用程序时出现以下错误 opt ruby enterprise 1 8 7 2010 02 lib ruby gems 1 8 gems rmagick 2 12 2 lib RMagick2 so libMagick
  • 将字符串数组绑定到 DropDownList?

    一个我一直没有解决的问题 我将用两个代码示例进行说明 其中一个可以工作 另一个则不能 Page Load FontFamily oFamilyFontList FontFamily Families DropDownList Fonts D
  • 将自定义图例添加到散景栏

    我有熊猫系列 gt gt gt etypes 0 6271 1 6379 2 399 3 110 4 4184 5 1987 我想在 Bokeh 中绘制条形图 p Bar etypes 然而对于传奇我只是etypes索引号 我尝试用这本字典
  • TextUtils.isEmpty() 方法对于空字符串返回 false

    我有下面的测试返回 false 我错过了什么吗 TextUtils isEmpty 更新 由于某种原因 我无法回答我的问题或添加评论 我正在运行 JUNit 测试用例 而不是仪器测试用例 正如我所建议的 我发现当我们不作为仪器运行时 上述方
  • php db 变量中的下划线导致问题

    我将数据库的所有登录信息存储在公共树之外的变量中 例如 hostname 172 0 0 0 dbname myname mydbname username myname user pw password 这是相当标准的 问题是我正在使用的
  • git 索引损坏

    由于某种原因 我的 Git 索引文件不断损坏 例如 如果我这样做git status I get 错误 索引文件 sha1 签名错误和致命 索引文件损坏 这种情况已经在我身上发生过好几次了 我想这可能与我的开发环境有关 我在 Mac 上工作
  • 如何在JHipster中创建具有集合类型字段的实体?

    在我们的项目中 我们使用领域模型Document A document可能有几个titles 所以用我的 JPA 知识我会建模Document像这样的实体 Entity public class Document private Set

随机推荐