Spring集成Java DSL中的WireTap配置
我已经在Spring Integration Java DSL中添加了Spring集成Java DSL中的WireTap配置,java,spring,spring-integration,Java,Spring,Spring Integration,我已经在Spring Integration Java DSL中添加了WireTap配置 我回顾了讨论,现在我的主Java配置文件如下 @Configuration @Import(LoggerConfiguration.class) @EnableIntegration public class ProcessorConfiguration { @Autowired private WireTap wireTap; @Bean public QueueCha
WireTap
配置
我回顾了讨论,现在我的主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;
}
}
所有这些代码的音调(!)都只是为了达到我在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中配置无线窃听,以减少冗长和简单?因为您确实没有
流,所以您可以只使用以下内容:
@ServiceActivator(inputChannel = "loggerChannel")
public MessageHandler loggerHandler() {
LoggingHandler loggingHandler = new LoggingHandler(INFO.name());
...
return loggingHandler;
}
如果只有简单的句柄
逻辑,则没有理由声明“verbose”IntegrationFlow
javadsl实际上可以与原始Java&Annotation配置相结合,甚至XML配置也可以存在于其中
WireTap
不能声明为@Bean
:
@Bean
public PublishSubscribeChannel outputChannel() {
return MessageChannels.publishSubscribe()
.interceptor(new WireTap(loggerChannel()))
.get();
}
XML定义通过解析器逻辑为
声明bean
对于Java配置,我们没有太多的选择,除非目标类的@Bean
,如果我们想将其作为Bean使用的话
另一方面,JavaDSL拥有.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
公共集成流wireTapFlow5(){
返回f->f
.窃听(sf->sf)
.transform(字符串::toUpperCase)
.channel(c->c.queue(“wireTapSubflowResult”))
.频道(“空频道”);
}
正如您所见,我们没有任何额外的@Bean
,甚至我们也不需要额外的有线监听频道
让我知道你想看多简单