2017-08-19 116 views
1

我写了下面的配置:Spring PollableChannel - 无法将loggingEnabled设置为false?

@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超时值接收。由于没有支持接收超时,所以 超时将被忽略。

我正在使用Spring Boot 1.5.3.RELASE。在AbstractAmqpChannel

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

我把一个断点。它被调用'false'(因为它应该根据我的配置),然后每次轮询消息时它都会被再次调用,并且它被设置为'true'。

我检查了哈希码,它似乎是我的bean,但'loggingEnabled'被重置为每个消息'真'。

我的配置有问题吗?我该如何解决这个问题?

回答

1

它看起来像一个错误 - 如果你在类路径上有spring-integration-jmx,或在你的一个配置类上指定了@EnableIntegrationManagement;对所有IntegrationManagement实现,IntegrationManagementConfigurer Bean设置记录启用为true,覆盖您的设置。请致电JIRA Issue。在此期间,您可以添加一个实现SmartLifecyle的bean来将标志设置为false(在start()方法中);它将在IntegrationManagementConfigurer之后运行。

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

+0

我想过把日志记录设置为WARN,只是想知道发生了什么。谢谢。 – aturkovic

相关问题