2015-11-12 58 views
1

嘿,我不能得到與Java的dsl工作的子流部分。如何在Java 7中啓動Spring集成Java dsl子流?

public IntegrationFlow flow() { 
    return IntegrationFlows 
     .from("messageRoutingChannel") 
     .route("headers." + HeaderKeys.CONNECTION_ID, new Consumer<RouterSpec<ExpressionEvaluatingRouter>>() { 
      @Override 
      public void accept(RouterSpec<ExpressionEvaluatingRouter> spec) { 
       spec.subFlowMapping("connection101", 
         IntegrationFlows.from("messageRoutingChannel") 
          .handle(new GenericHandler<String>() { 
           @Override 
           public Object handle(String payload, Map<String, Object> arg1) { 
            System.out.println(payload + " after routing"); 
            return null; 
           } 
          }) 
          .get()); 
      } 
     }) 
     .get(); 

}

現在,當我的IntegrationFlow添加到子流我得給它一個from()吧?我真的不知道該給那裏什麼。我試着在route()之上放置一個channel(),然後從該頻道執行from(),但那也不起作用。參考中的大多數示例都使用lambda表達式,因此在那裏沒有明確的IntegrationFlows.from()。只是一個sf -> sf.handle()

java @Bean public IntegrationFlow routeFlow() { return f -> f .<Integer, Boolean>route(p -> p % 2 == 0, m -> m.channelMapping("true", "evenChannel") .subFlowMapping("false", sf -> sf.<Integer>handle((p, h) -> p * 3))) .transform(Object::toString) .channel(c -> c.queue("oddChannel")); } 

什麼從隱式評估到雖然?我怎樣才能在Java 7中工作?感謝幫助。

回答

1

好,首先它不是用Java 7中譜寫自己的代碼,那是因爲它已經看起來像意大利麪條一盤好主意。但如果你要在那裏添加一個業務邏輯怎麼辦?..

回到你的Java 7的情況下,它會更好地使用標準路由設置和基於通道的邏輯,並忘記子流直到Java 8升級。

反正你可以這樣說:

spec.subFlowMapping("connection101", new IntegrationFlow() { 

     @Override 
     void configure(IntegrationFlowDefinition<?> flow) { 
      flow.handle(...); 
     } 

}) 

只是因爲sf -> sf.handle(...)是內聯接口實現的簡寫形式。

+0

呀它看起來醜陋的我猜,但當時我只是要去堅持在子作兩種出站適配器,以便業務邏輯不臃腫起來了。我可以將它們分成不同的bean,但它們沒有任何重用的潛力。如果我只有一臺路由器,流量本身就毫無意義。也可以讓路由器成爲一個bean並跳過dsl。我只是把它分離出來,並很快在這裏希望他們沒事的Java 8。謝謝! – alokraop

相關問題