我开始使用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>
<UserAuthorization>
。if
以根据其<Action>
值验证当前项目的业务规则这样,我担心我没有正确使用Spring批处理。
那是正确的做法吗?
我可以使用几个步骤和决策程序来实现批处理的所有逻辑吗?你有一些例子吗?
将SB用于此类问题是正确的决定,并且您只需要一个步骤(对于本用例)就可以了。
第一个解决方案:
读取器很简单(使用StaxEventItemReader
),而处理器则没有用(除非您需要执行一些业务检查)。
比较有趣的一点是作者,因为您必须:
AddItemWriter, UpdateItemWriter, DeleteItemWriter
执行实际写入逻辑的操作(例如)定义一个自定义写入器<ACTION>
标记值将写操作分派给正确的编写器。第二种解决方案(可能更“复杂”):
StaxEventItemReader
ItemProcessor
转换<UserAuthorization>
为自定义Action
类封装操作(AddUserAuth, DeleteUserAuth, UpdateUserAuth
例如)AddItemWriter, UpdateItemWriter, DeleteItemWriter
执行实际写入逻辑的操作(例如)定义一个自定义写入器ClassifierCompositeItemWriter
基于SubclassClassifier
; 该分类器使用Action
从处理器创建的自定义类将其分发给正确的作者该解决方案比解决方案一更(轻松)可扩展,因为您只需要Action
为(新)动作创建自定义类和正确的编写器,编写只是配置问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句