Skip to content

Commit fb64b3a

Browse files
committed
GH-3544: Support SpEL in @KafkaListener containerPostProcessor
Fixes: #3544 #3544 - Enhance resolveContainerPostProcessor method in KafkaListenerAnnotationBeanPostProcessor to evaluate SpEL expressions - Verify containerPostProcessor property in KafkaListener annotation can be specified as a SpEL expression
1 parent d040baa commit fb64b3a

File tree

2 files changed

+13
-7
lines changed

2 files changed

+13
-7
lines changed

spring-kafka/src/main/java/org/springframework/kafka/annotation/KafkaListenerAnnotationBeanPostProcessor.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -745,11 +745,16 @@ private KafkaListenerContainerFactory<?> resolveContainerFactory(KafkaListener k
745745

746746
private void resolveContainerPostProcessor(MethodKafkaListenerEndpoint<?, ?> endpoint,
747747
KafkaListener kafkaListener) {
748-
749-
String containerPostProcessor = kafkaListener.containerPostProcessor();
750-
if (StringUtils.hasText(containerPostProcessor)) {
751-
endpoint.setContainerPostProcessor(this.beanFactory.getBean(containerPostProcessor,
752-
ContainerPostProcessor.class));
748+
Object containerPostProcessor = resolveExpression(kafkaListener.containerPostProcessor());
749+
if (containerPostProcessor instanceof ContainerPostProcessor<?, ?, ?> cpp) {
750+
endpoint.setContainerPostProcessor(cpp);
751+
}
752+
else {
753+
String containerPostProcessorBeanName = resolveExpressionAsString(kafkaListener.containerPostProcessor(), "containerPostProcessor");
754+
if (StringUtils.hasText(containerPostProcessorBeanName)) {
755+
endpoint.setContainerPostProcessor(
756+
this.beanFactory.getBean(containerPostProcessorBeanName, ContainerPostProcessor.class));
757+
}
753758
}
754759
}
755760

spring-kafka/src/test/java/org/springframework/kafka/listener/ContainerCustomizationTests.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2019-2023 the original author or authors.
2+
* Copyright 2019-2024 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -43,6 +43,7 @@
4343
* Tests for container customizations.
4444
*
4545
* @author Francois Rosiere
46+
* @author Soby Chacko
4647
* @since 3.1
4748
*/
4849
@SuppressWarnings("unused")
@@ -129,7 +130,7 @@ public void postProcessor(String foo) {
129130
id = CONTAINER_CUSTOMIZER_AND_POST_PROCESSOR,
130131
topics = TOPIC,
131132
containerFactory = "containerFactoryWithCustomizer",
132-
containerPostProcessor = "infoContainerPostProcessor")
133+
containerPostProcessor = "#{__listener.infoContainerPostProcessor}")
133134
public void containerCustomizerAndPostProcessor(String foo) {
134135
}
135136

0 commit comments

Comments
 (0)