Spring integration 如何在子流映射中正确控制流

Spring integration 如何在子流映射中正确控制流,spring-integration,Spring Integration,这是一个基本的问题,但无处可问。(我上周四刚刚开始spring集成。) 我必须使用子流映射。一个XML文件可以包含多个域数据。文件名基筛选只告诉我XML文件中包含什么类型的数据 这是工作版本。2个持久通道执行良好并保存数据 频道(“更新partsinventoryflow.input”) 频道(“更新TransactionCompleteLogFlow.input”) 实际上,我的意图不是工作版本。数据应在日志之前保存。 工作版本似乎同时保存数据和日志。 请让我知道 提前感谢。同一个密钥不能有多

这是一个基本的问题,但无处可问。(我上周四刚刚开始spring集成。) 我必须使用子流映射。一个XML文件可以包含多个域数据。文件名基筛选只告诉我XML文件中包含什么类型的数据

这是工作版本。2个持久通道执行良好并保存数据

频道(“更新partsinventoryflow.input”)

频道(“更新TransactionCompleteLogFlow.input”)

实际上,我的意图不是工作版本。数据应在日志之前保存。 工作版本似乎同时保存数据和日志。 请让我知道


提前感谢。

同一个密钥不能有多个映射条目。告诉
.subFlowMapping时(PayloadType.STOCK
,这意味着一些内部通道被映射到该类型的
HashMap
。这就是相同密钥的第二个映射始终获胜的方式。因此,您的第一个解决方案是正确的方法:一个映射用于预期类型,另一个映射用于将相同消息分发到不同的子流。.subFlowMapping(PayloadType.STOCK, sf -> sf .transform(unmarshallingTransformer) .<Stock, List<PartsInventory>>transform(s -> createPartsInventories(s)) .publishSubscribeChannel(c1 -> c1 .subscribe(s1 -> s1 .channel("updatingPartsInventoryFlow.input"))) .publishSubscribeChannel(c2 -> c2 .subscribe(s2 -> s2 .handle((payload, headers) -> { return createPartsInventoryTransactionLog((List<PartsInventory>) payload, (String) headers.get("StartTime")); }) .channel("updatingTransactionCompleteLogFlow.input"))))
.subFlowMapping(PayloadType.STOCK, sf -> sf
                    .transform(unmarshallingTransformer)
                    .<Stock, List<PartsInventory>>transform(s -> createPartsInventories(s))
                    .channel("updatingPartsInventoryFlow.input")
                    .handle((payload, headers) -> {
                        return createPartsInventoryTransactionLog((List<PartsInventory>) payload, 
                                (String) headers.get("StartTime"));
                    })
                    .channel("updatingTransactionCompleteLogFlow.input"))

.subFlowMapping(PayloadType.STOCK, sf -> sf
                    .publishSubscribeChannel(c1 -> c1
                    .subscribe(s1 -> s1
                        .transform(unmarshallingTransformer)
                        .<Stock, List<PartsInventory>>transform(s -> createPartsInventories(s))
                        .channel("updatingPartsInventoryFlow.input")))
                        .handle((payload, headers) -> {
                            return createPartsInventoryTransactionLog((List<PartsInventory>) payload, 
                                            (String) headers.get("StartTime"));
                        })
                        .channel("updatingTransactionCompleteLogFlow.input"))))