GH-1808: Fix Container Properties Crosstalk

Resolves https://github.com/spring-projects/spring-kafka/issues/1808

Each container got a reference to the same `Properties` object in
`kafkaConsumerProperties`, unless it was created via a `@KafkaListener`
with property overrides.

Do not copy the property from the factory's properties.

**Cherry-pick to all supported branches**

# Conflicts:
#	spring-kafka/src/main/java/org/springframework/kafka/config/AbstractKafkaListenerContainerFactory.java
This commit is contained in:
Gary Russell
2021-05-21 08:27:14 -04:00
committed by Artem Bilan
parent 317fbcc8bd
commit 4f68b35bd2
2 changed files with 4 additions and 1 deletions

View File

@@ -376,7 +376,7 @@ public abstract class AbstractKafkaListenerContainerFactory<C extends AbstractMe
protected void initializeContainer(C instance, KafkaListenerEndpoint endpoint) {
ContainerProperties properties = instance.getContainerProperties();
BeanUtils.copyProperties(this.containerProperties, properties, "topics", "topicPartitions", "topicPattern",
"messageListener", "ackCount", "ackTime");
"messageListener", "ackCount", "ackTime", "kafkaConsumerProperties");
JavaUtils.INSTANCE
.acceptIfNotNull(this.afterRollbackProcessor, instance::setAfterRollbackProcessor)
.acceptIfCondition(this.containerProperties.getAckCount() > 0, this.containerProperties.getAckCount(),

View File

@@ -54,6 +54,9 @@ public class ContainerFactoryTests {
assertThat(container.getContainerProperties().getAckCount()).isEqualTo(123);
assertThat(KafkaTestUtils.getPropertyValue(container, "concurrency", Integer.class)).isEqualTo(22);
assertThat(customized).isTrue();
ConcurrentMessageListenerContainer<String, String> container2 = factory.createContainer("foo");
assertThat(container.getContainerProperties().getKafkaConsumerProperties())
.isNotSameAs(container2.getContainerProperties().getKafkaConsumerProperties());
}
}