2016-02-26 67 views
1

我已將WireTap配置添加到我的Spring集成Java DSL中。Spring集成Java DSL中的WireTap配置

我回顧討論What is the equivalent of logging-channel-adapter in java DSL現在我主要的Java配置文件看起來像

@Configuration 
@Import(LoggerConfiguration.class) 
@EnableIntegration 
public class ProcessorConfiguration { 

    @Autowired 
    private WireTap wireTap; 

    @Bean 
    public QueueChannel inputChannel() { 
     return MessageChannels.queue(500) 
      .interceptor(wireTap) 
      .get(); 
    } 

    @Bean 
    public PublishSubscribeChannel outputChannel() { 
     return MessageChannels.publishSubscribe() 
      .interceptor(wireTap) 
      .get(); 
    } 
    ... 
} 

而且LoggerConfiguration

@Configuration 
public class LoggerConfiguration { 

    public static final LoggingHandler.Level INFO = LoggingHandler.Level.INFO; 

    @Bean 
    public WireTap wireTap() { 
     return new WireTap(loggerChannel()); 
    } 

    @Bean 
    public IntegrationFlow loggerChain() { 
     return IntegrationFlows.from(loggerChannel()) 
       .handle(loggerHandler()) 
       .get(); 
    } 

    @Bean 
    public MessageChannel loggerChannel() { 
     return MessageChannels.direct().get(); 
    } 

    public MessageHandler loggerHandler() { 
     LoggingHandler loggingHandler = new LoggingHandler(INFO.name()); 
     ... 
     return loggingHandler; 
    } 
} 

的THES色調所有(!)的代碼只有達到我曾在這些簡單的行中的XML配置

<int:channel id="inputChannel"> 
    <int:queue capacity="500"/> 
    <int:interceptors> 
     <int:wire-tap channel="logger"/> 
    </int:interceptors> 
</int:channel> 

<int:publish-subscribe-channel id="outputChannel"> 
    <int:interceptors> 
     <int:wire-tap channel="logger"/> 
    </int:interceptors> 
</int:publish-subscribe-channel> 

<int:logging-channel-adapter id="logger" log-full-message="true" level="INFO"/> 

怎麼可以我在Java DSL中配置wireTaps不那麼冗長和簡單?

回答

1

既然你真的沒有有沒有flow你可以結束與:

@ServiceActivator(inputChannel = "loggerChannel") 
public MessageHandler loggerHandler() { 
    LoggingHandler loggingHandler = new LoggingHandler(INFO.name()); 
    ... 
    return loggingHandler; 
} 

沒有理由申報了「詳細」 IntegrationFlow如果只有簡單的handle邏輯。

Java DSL確實可以與原始Java &註釋配置相結合,甚至XML配置也可以在那裏生存。

WireTap可以不被聲明爲@Bean

@Bean 
public PublishSubscribeChannel outputChannel() { 
    return MessageChannels.publishSubscribe() 
     .interceptor(new WireTap(loggerChannel())) 
     .get(); 
} 

XML定義經由分析器邏輯聲明瞭<int:wire-tap>豆。

對於Java配置,我們沒有太多的選擇,除非目標類爲@Bean,如果我們想將它作爲一個bean。

另一方面,Java DSL有.wireTap() EIP方法。所以,你不需要聲明所有這些bean。例如。從我們的測試情況:

@Bean 
public IntegrationFlow wireTapFlow5() { 
    return f -> f 
      .wireTap(sf -> sf 
        .<String, String>transform(String::toUpperCase) 
        .channel(c -> c.queue("wireTapSubflowResult"))) 
      .channel("nullChannel"); 
} 

正如你看到的,我們沒有任何額外的@Bean那裏,甚至我們不需要爲WireTap額外的通道。

讓我知道更簡單,你想看看它!

相關問題