Batchlet是在JavaEE批处理中实现ETL步骤的正确方法吗?
我正在研究Javaee批处理API(jsr-352),以便测试使用该技术为我们自己的解决方案更换当前ETL工具的可行性 我的目标是建立一份工作,我:Batchlet是在JavaEE批处理中实现ETL步骤的正确方法吗?,java,jakarta-ee,java-ee-7,java-batch,Java,Jakarta Ee,Java Ee 7,Java Batch,我正在研究Javaee批处理API(jsr-352),以便测试使用该技术为我们自己的解决方案更换当前ETL工具的可行性 我的目标是建立一份工作,我: 在步骤1中从数据源获取一些(虚拟)数据 步骤2中来自其他数据源的一些其他数据和 在步骤3中合并它们 我希望处理每个项目,而不是写入文件,而是将其发送到下一步。并存储信息以供进一步使用。我可以使用batchlets和jobContext.setTransientUserData()实现这一点 我认为我没有正确理解这些概念:据我所知,JSR-352
- 在步骤1中从数据源获取一些(虚拟)数据
- 步骤2中来自其他数据源的一些其他数据和
- 在步骤3中合并它们
jobContext.setTransientUserData()
实现这一点
我认为我没有正确理解这些概念:据我所知,JSR-352适用于此类ETL任务,但它有两种类型的步骤:chunk和batchlet。块是“三阶段”的步骤,在其中读取、处理和写入数据。Batchlet是不在数据的每个项目上执行的任务,但只执行一次(如计算总数、发送电子邮件和其他)
我的问题是,如果我考虑小批的定义,我的解决方案是不正确的。< /P>
如何使用Javaee批处理API实现这个kinf od作业?我认为最好使用chunk而不是batchlet来实现ETL。数据源的典型区块处理如下所示:
:打开光标(创建ItemReader#open()
,连接
和语句
),并将其保存为结果集
的实例变量ItemReader
:使用ItemReader#readItem()
ResultSet
:关闭JDBC资源ItemReader#close()
:进行计算,创建并返回一个包含结果的对象ItemProcessor#processItem()
:将计算数据保存到数据库。打开ItemWriter#writeItems()
,连接
并调用语句
并关闭它们执行更新()
ItemReader\open()
中为其打开一个光标。然后在ItemProcessor#processItem()
中为每个项目获取另一个
我还建议您阅读区块处理的有用示例:
getTransientData()
和setTransientData()
实现包含3个简单(Batchlet)步骤的作业。我希望这能回答你的问题。