Skip to content

Commit 581d7e5

Browse files
sobychackoartembilan
authored andcommitted
GH-3544: Support SpEL in @KafkaListener containerPostProcessor (#3548)
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 (cherry picked from commit 3f45fc0) # Conflicts: # spring-kafka/src/main/java/org/springframework/kafka/annotation/KafkaListenerAnnotationBeanPostProcessor.java
1 parent c881f2d commit 581d7e5

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
@@ -735,11 +735,16 @@ private KafkaListenerContainerFactory<?> resolveContainerFactory(KafkaListener k
735735

736736
private void resolveContainerPostProcessor(MethodKafkaListenerEndpoint<?, ?> endpoint,
737737
KafkaListener kafkaListener) {
738-
739-
final String containerPostProcessor = kafkaListener.containerPostProcessor();
740-
if (StringUtils.hasText(containerPostProcessor)) {
741-
endpoint.setContainerPostProcessor(this.beanFactory.getBean(containerPostProcessor,
742-
ContainerPostProcessor.class));
738+
Object containerPostProcessor = resolveExpression(kafkaListener.containerPostProcessor());
739+
if (containerPostProcessor instanceof ContainerPostProcessor<?, ?, ?> cpp) {
740+
endpoint.setContainerPostProcessor(cpp);
741+
}
742+
else {
743+
String containerPostProcessorBeanName = resolveExpressionAsString(kafkaListener.containerPostProcessor(), "containerPostProcessor");
744+
if (StringUtils.hasText(containerPostProcessorBeanName)) {
745+
endpoint.setContainerPostProcessor(
746+
this.beanFactory.getBean(containerPostProcessorBeanName, ContainerPostProcessor.class));
747+
}
743748
}
744749
}
745750

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)