0

在 spring boot-integration 中,有一个将重命名文件的过滤器,如果实例仅成功重命名文件,它应该继续流程,否则它将被传递到 null 通道。

想记录空通道以查看未成功重命名的文件名。

尝试以下解决方案。但在应用程序启动期间发生异常。你能建议实现这一目标的解决方案吗?

<integration:filter input-channel="filesInChannel" expression="headers['file_originalFile'].renameTo(new java.io.File(headers['file_originalFile'].absolutePath + '.lock'))" 
        output-channel="filesHeaderEnricher" discard-channel="nullChannel" throw-exception-on-rejection="false">
</integration:filter> 
<integration:channel id="nullChannel">
  <integration:interceptors>
    <integration:wire-tap channel="logNullChannel"/>
 </integration:interceptors>
</integration:channel>
<integration:logging-channel-adapter id="logNullChannel" level="DEBUG"/>

如果为 nullchannel 添加了 logging-channel-adapter 则会出现异常:

  java.lang.IllegalStateException: The bean name 'nullChannel' is reserved.
    at org.springframework.integration.config.DefaultConfiguringBeanFactoryPostProcessor.registerNullChannel(DefaultConfiguringBeanFactoryPostProcessor.java:112) ~[spring-integration-core-5.0.4.RELEASE.jar!/:5.0.4.RELEASE]
    at org.springframework.integration.config.DefaultConfiguringBeanFactoryPostProcessor.postProcessBeanFactory(DefaultConfiguringBeanFactoryPostProcessor.java:63) ~[spring-integration-core-5.0.4.RELEASE.jar!/:5.0.4.RELEASE]
    at 
4

1 回答 1

1

nullChannel根本无法拦截。NullChannel您需要为您的用例考虑其他渠道或为该类别打开调试日志记录:

 if (this.loggingEnabled && this.logger.isDebugEnabled()) {
        this.logger.debug("message sent to null channel: " + message);
    }
于 2018-09-10T12:28:49.123 回答