我们有以下简单要求,我们正在使用Spring Integration:
status=1
的行)A, B and C
。
B
和C
应该在A
持久化后更新稍后将需要信息。B
和C
的约束:B
将使用A
的ID加上使用投票找到的行中的信息。 status
标记设置为0
我们到现在为止:
inbound-channel-adapter
用于投票第1步。
<int-jpa:inbound-channel-adapter channel="inboundWFOne"
entity-manager="entityManagerFactory"
jpa-query="select en from WorkflowOne en where en.status=1"
delete-after-poll="true">
<int:poller>
<int:transactional propagation="REQUIRED" transaction-manager="transactionManager" />
<!-- Note: This is not working for us.. hence the delete-after-poll for timebeing <int:transactional propagation="REQUIRED" transaction-manager="transactionManager" synchronization-factory="txSyncFactory"/>-->
</int:poller>
</int-jpa:inbound-channel-adapter>
将返回List<Message<?>>
的服务激活器,因为它将是A
,B
和C
个实体的组合。
<int:service-activator input-channel="inboundWFOne" ref="wfOneService"
method="processWFOne" output-channel="outboundWFOne" />
我们考虑的是<int:chain>
<int:payload-type-router>
,它会将A
,B
和C
发送到不同的渠道,并且会有outbound-channel-adapter
那里将写入DB。 然而,无法保证订单的设计!
我们如何形成链条,以便在A
持续存在后我们将id
传递回来,以便B
和C
可以使用它。基本满足上述2.2中的条件。
注意:int:jpa
&#39; outbound-channel-adapter
似乎无法传回持久对象。
答案 0 :(得分:1)
有。如果您没有任何线程移位,则所有内容都在同一个线程中按顺序执行。因此,您的List<Message<?>>
将被迭代,并且该项目将被发送到路由器的频道。路由器知道将此消息进一步发送到适当的出站通道适配器以进行保存。只有在保存之后,呼叫才会返回到开头提到的循环中以处理下一条消息。
因此,只有您需要确保的是该服务激活器的消息列表中的正确顺序。