使用步骤决定者和块时的春季批处理

尼罗河

我开始使用Spring Batch,并且对使用步骤,决策程序和块时有一个疑问。

给出以下输入:

<UserAuthorizationEvent>
    <UserAuthorization>
        <Action>ADD</Action>
        <UserName>Name1</UserName>
        <!-- more properties here -->
    </UserAuthorization>
    <UserAuthorization>
        <Action>UPDATE</Action>
        <UserId>456</UserId>
        <UserName>NewName2</UserName>
        <!-- more properties here -->
    </UserAuthorization>
    <UserAuthorization>
        <UserId>789</UserId>
        <Action>DELETE</Action>
    </UserAuthorization>
    <!-- 1000 or more UserAuthorization here -->
</UserAuthorizationEvent>

对于<UserAuthorization>文件中的每个,我都会根据制定不同的业务规则,以在对数据库执行查询之前进行验证<Action>(示例:对于ADD,请验证UserName在数据库中是否唯一,并且仅由字母组成;对于DELETE,请验证表中是否存在ID)

然后,该<Action>值将确定我是否需要在数据库中插入,更新或删除一个值。(操作可能具有其他值,例如UPDATE_RIGHTS或RESET_PASSWORD)

最好的办法是什么?

我是否定义这样的工作:

<job id="myJob" xmlns="http://www.springframework.org/schema/batch">
    <step id="step1">
        <tasklet>
            <chunk reader="itemReader" processor="itemProcessor" writer="itemWriter" commit-interval="2" />
        </tasklet>
    </step>
</job>
  • itemReader将读取xml文件并一次返回一个<UserAuthorization>
  • itemProcessor将充满,if以根据其<Action>验证当前项目的业务规则
  • itemWriter将把该项目保留在数据库中。如果要在执行查询之前执行更多操作,是否还需要在此处添加逻辑?

这样,我担心我没有正确使用Spring批处理。

那是正确的做法吗?

我可以使用几个步骤和决策程序来实现批处理的所有逻辑吗?你有一些例子吗?

卢卡·巴索·里奇(Luca Basso Ricci)

将SB用于此类问题是正确的决定,并且您只需要一个步骤(对于本用例)就可以了。

第一个解决方案:
读取器很简单(使用StaxEventItemReader),而处理器则没有用(除非您需要执行一些业务检查)。
比较有趣的一点是作者,因为您必须:

  1. 为每个AddItemWriter, UpdateItemWriter, DeleteItemWriter执行实际写入逻辑的操作(例如)定义一个自定义写入器
  2. 创建一个主编写器(由专门的编写器组成),在其中根据<ACTION>标记值将写操作分派给正确的编写器

第二种解决方案(可能更“复杂”):

  1. 标准 StaxEventItemReader
  2. 自定义ItemProcessor转换<UserAuthorization>为自定义Action类封装操作(AddUserAuth, DeleteUserAuth, UpdateUserAuth例如)
  3. 为每个AddItemWriter, UpdateItemWriter, DeleteItemWriter执行实际写入逻辑的操作(例如)定义一个自定义写入器
  4. 作为主要作者使用ClassifierCompositeItemWriter基于SubclassClassifier; 该分类器使用Action从处理器创建的自定义类将其分发给正确的作者

该解决方案比解决方案一更(轻松)可扩展,因为您只需要Action为(新)动作创建自定义类和正确的编写器,编写只是配置问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

页面大小和提交间隔之间的春季批处理差异

来自分类Dev

在循环中使用%time和%date时,批处理脚本中的时间戳相同

来自分类Dev

如何在没有项目编写器的情况下编写春季批处理步骤

来自分类Dev

春季批处理步骤执行警报

来自分类Dev

春季批处理步骤失败

来自分类Dev

春季批处理中如何在每个ItemReader和ItemWriter中使用多个transactioManager

来自分类Dev

春季批处理:NotSerializableException

来自分类Dev

在春季批处理中使用分区步骤访问@JobScope bean

来自分类Dev

春季批处理作业重新启动时始终读取前n行

来自分类Dev

春季批处理:org.springframework.beans.factory.BeanCreationException:使用JobScope时创建名称为“ scopedTarget.writer”的bean时出错

来自分类Dev

春季批处理:作业实例在使用注释时按顺序运行

来自分类Dev

春季批处理步骤不执行

来自分类Dev

使用Google Bigquery和Python批处理

来自分类Dev

在春季批处理中读取csv文件时验证字段长度

来自分类Dev

是否有理由在迭代和绘制字典或数组时使用pyglet批处理?

来自分类Dev

已在事务中时开始春季批处理作业

来自分类Dev

我们可以在春季批处理中使用AmqpItemReader和AmqpItermWriter进行请求/答复用例吗?

来自分类Dev

使用cmd时隐藏批处理窗口

来自分类Dev

使用批处理替换前缀和后缀

来自分类Dev

春季批处理框架

来自分类Dev

春季批处理StoredProcedureItemReader

来自分类Dev

在春季批处理中使用分区步骤访问@JobScope bean

来自分类Dev

春季批处理中的链接步骤

来自分类Dev

春季批处理JpaPagingItemReader(可能)在使用SELECT本机查询时从数据库中删除行

来自分类Dev

Windows批处理语法错误,未使用if块

来自分类Dev

春季批处理-运行JobLauncher

来自分类Dev

春季批处理AsynchJob启动器,设置作业仓库时出错

来自分类Dev

春季批处理+完成一个步骤

来自分类Dev

如果任何块失败,如何中止春季批处理作业

Related 相关文章

  1. 1

    页面大小和提交间隔之间的春季批处理差异

  2. 2

    在循环中使用%time和%date时,批处理脚本中的时间戳相同

  3. 3

    如何在没有项目编写器的情况下编写春季批处理步骤

  4. 4

    春季批处理步骤执行警报

  5. 5

    春季批处理步骤失败

  6. 6

    春季批处理中如何在每个ItemReader和ItemWriter中使用多个transactioManager

  7. 7

    春季批处理:NotSerializableException

  8. 8

    在春季批处理中使用分区步骤访问@JobScope bean

  9. 9

    春季批处理作业重新启动时始终读取前n行

  10. 10

    春季批处理:org.springframework.beans.factory.BeanCreationException:使用JobScope时创建名称为“ scopedTarget.writer”的bean时出错

  11. 11

    春季批处理:作业实例在使用注释时按顺序运行

  12. 12

    春季批处理步骤不执行

  13. 13

    使用Google Bigquery和Python批处理

  14. 14

    在春季批处理中读取csv文件时验证字段长度

  15. 15

    是否有理由在迭代和绘制字典或数组时使用pyglet批处理?

  16. 16

    已在事务中时开始春季批处理作业

  17. 17

    我们可以在春季批处理中使用AmqpItemReader和AmqpItermWriter进行请求/答复用例吗?

  18. 18

    使用cmd时隐藏批处理窗口

  19. 19

    使用批处理替换前缀和后缀

  20. 20

    春季批处理框架

  21. 21

    春季批处理StoredProcedureItemReader

  22. 22

    在春季批处理中使用分区步骤访问@JobScope bean

  23. 23

    春季批处理中的链接步骤

  24. 24

    春季批处理JpaPagingItemReader(可能)在使用SELECT本机查询时从数据库中删除行

  25. 25

    Windows批处理语法错误,未使用if块

  26. 26

    春季批处理-运行JobLauncher

  27. 27

    春季批处理AsynchJob启动器,设置作业仓库时出错

  28. 28

    春季批处理+完成一个步骤

  29. 29

    如果任何块失败,如何中止春季批处理作业

热门标签

归档