Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring集成Java DSL中的WireTap配置_Java_Spring_Spring Integration - Fatal编程技术网

Spring集成Java DSL中的WireTap配置

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

我已经在Spring Integration Java DSL中添加了
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
,甚至我们也不需要额外的
有线监听频道

让我知道你想看多简单