Spring PollableChannel - 无法将loggingEnabled设置为false?

时间:2017-08-19 14:08:14

标签: java spring spring-integration

我写了以下配置:

@Slf4j
@Configuration
@EnableConfigurationProperties(BatchProperties.class)
public class BatchConfiguration {

    @Autowired
    private BatchProperties properties;

    @Bean
    public PollableAmqpChannel testingChannel(final RabbitTemplate rabbitTemplate) {
        final PollableAmqpChannel channel = new PollableAmqpChannel(properties.getQueue(), rabbitTemplate);
        channel.setLoggingEnabled(false);
        return channel;
    }

    @Bean
    @ServiceActivator(inputChannel = "testingChannel", poller = @Poller(fixedRate = "1000", maxMessagesPerPoll = "1"))
    public MessageHandler messageHandler(final RabbitTemplate rabbitTemplate) {
        return message -> {
            log.info("Received: {}", message);
            rabbitTemplate.convertAndSend(properties.getQueue(), message);
        };
    }
}

消息成功读取并重新排队,但我不断收到以下消息:

  

使用PollableAmqpChannel上的超时值调用receive。该   超时将被忽略,因为不支持接收超时。

我正在使用Spring Boot 1.5.3.RELASE。

我提出了一个断点:

@Override
public void setLoggingEnabled(boolean loggingEnabled) {
    this.loggingEnabled = loggingEnabled;
}

AbstractAmqpChannel课程中。它被调用'false'(因为它应该根据我的配置)然后每次轮询消息时它再次被调用并且它被设置为'true'。

我检查了哈希码,看起来它是我的bean,但是'loggingEnabled'被每条消息重置为'true'。

我的配置有问题,我该如何解决?

1 个答案:

答案 0 :(得分:1)

它看起来像一个错误 - 如果你在类路径上有spring-integration-jmx,或者在你的一个配置类上指定@EnableIntegrationManagement; IntegrationManagementConfigurer bean将所有IntegrationManagement实现的日志记录设置为true,覆盖您的设置。

请打开JIRA Issue

与此同时,您可以添加一个实现SmartLifecyle的bean,将标志设置为false(在start()方法中);它将在IntegrationManagementConfigurer之后运行。

当然,您也可以将日志类别org.springframework.integration.amqp.channel.PollableAmqpChannel设置为WARN,以便更简单地实现相同的效果。