2017-08-19 7 views
1

私は、次の設定を書いた:Spring PollableChannel - loggingEnabledをfalseに設定できませんか?

PollableAmqpChannelのタイムアウト値を受け取るコール:

@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); 
     }; 
    } 
} 

メッセージが正常に読み込まれ、キューに再登録が、私は、次のメッセージを取得しておく取得します。受信タイムアウトがサポートされていないため、 タイムアウトは無視されます。

私はSpring Boot 1.5.3.RELASEを使用しています。 AbstractAmqpChannelクラスに

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

は私が上でブレークポイントを入れています。それは(私の設定に従って)「偽」で呼び出され、メッセージをポーリングするたびに再度呼び出され、「true」に設定されます。

私はハッシュコードをチェックしましたが、それは私のbeanだと思われますが、 'loggingEnabled'は各メッセージで 'true'にリセットされます。

設定に問題がありますか?これをどのように修正できますか?

答えて

1

クラスパスにspring-integration-jmxがある場合、または設定クラスの1つに@EnableIntegrationManagementを指定するとバグのようです。 IntegrationManagementConfigurer beanはすべてのIntegrationManagement実装でtrueに設定されたロギングを設定し、設定を上書きします。

JIRA Issueを開いてください。

その間に、SmartLifecyleを実装するBeanを追加して、フラグをfalseに戻すことができます(start()メソッド内)。 IntegrationManagementConfigurerの後に実行されます。

もちろん、ログカテゴリorg.springframework.integration.amqp.channel.PollableAmqpChannelWARNに設定しても、同じ効果を実現することができます。

+0

私はWARNにロギングを設定することを考えましたが、何が起こっていたのかを知りたかっただけです。ありがとう。 – aturkovic

関連する問題