gpt4 book ai didi

java - 使用步骤决定器和 block 时的 Spring 批处理

转载 作者:行者123 更新时间:2023-12-01 23:00:02 24 4
gpt4 key购买 nike

我开始使用 Spring Batch,但我有一个关于何时使用步骤、决策程序和 block 的问题。

给定以下输入:

<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 批处理。

这样做正确吗?

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

最佳答案

使用 SB 来解决此类问题是正确的决定,您不需要多于一个步骤(对于此用例)。

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

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

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

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

此解决方案比解决方案一更(容易)扩展,因为您只需要创建自定义 Action类 - 和正确的编写器 - 对于(新)操作和编写只是一个配置问题。

关于java - 使用步骤决定器和 block 时的 Spring 批处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23513113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com