代码之家  ›  专栏  ›  技术社区  ›  sarah

Spring集成DSL添加中间流事务

  •  2
  • sarah  · 技术社区  · 8 年前

    我想将流的特定部分作为事务处理。例如,我想在 事务块。以下是我使用的流程代码:

    @Bean
    public IntegrationFlow createNumberRange() {
    
        return IntegrationFlows.from("npEventPubSubChannel")
    
                .transform(...) 
                .transform(...)// should be transactional with above transform together
                .transform(...) // non transactional
                .handle((payload, headers) -> numbRepository.saveAll(payload))
                .get();
    
    }
    

    我发现了一种解决方法,即添加另一个句柄并将流定向到事务网关,如下所示:

    .handle("transactionalBean", "transactionalMetod") //Then implemented messagingGateway which consists of transactional method.
    

    我还发现 mid flow transactional support 但是找不到一个例子。

    1 回复  |  直到 8 年前
        1
  •  2
  •   Artem Bilan    8 年前

    如果您想在事务中封装两个转换器,除非将该调用隐藏在事务网关之后,否则您别无选择。这与使用原始Java时完全相似:

    @Transactional
    void myTransactionalMethod() {
        transform1();
        transform2();
    }
    

    我相信你同意我的观点,我们总是要这样做,才能让他们都在同一笔交易中。

    .gateway(f -> f
                .transform(...)
                .transform(...),
            e -> e.transactional())