diff --git a/binders/kafka-binder/spring-cloud-stream-binder-kafka-core/src/main/java/org/springframework/cloud/stream/binder/kafka/properties/KafkaBinderConfigurationProperties.java b/binders/kafka-binder/spring-cloud-stream-binder-kafka-core/src/main/java/org/springframework/cloud/stream/binder/kafka/properties/KafkaBinderConfigurationProperties.java index 1b0a48cec..779e2f47f 100644 --- a/binders/kafka-binder/spring-cloud-stream-binder-kafka-core/src/main/java/org/springframework/cloud/stream/binder/kafka/properties/KafkaBinderConfigurationProperties.java +++ b/binders/kafka-binder/spring-cloud-stream-binder-kafka-core/src/main/java/org/springframework/cloud/stream/binder/kafka/properties/KafkaBinderConfigurationProperties.java @@ -38,7 +38,6 @@ import org.apache.kafka.clients.producer.ProducerConfig; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.kafka.KafkaProperties; -import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.cloud.stream.binder.HeaderMode; import org.springframework.cloud.stream.binder.ProducerProperties; import org.springframework.cloud.stream.binder.kafka.properties.KafkaProducerProperties.CompressionType; @@ -64,7 +63,6 @@ import org.springframework.util.StringUtils; * @author Chukwubuikem Ume-Ugwa * @author Nico Heller */ -@ConfigurationProperties(prefix = "spring.cloud.stream.kafka.binder") public class KafkaBinderConfigurationProperties { private static final String DEFAULT_KAFKA_CONNECTION_STRING = "localhost:9092"; @@ -146,14 +144,11 @@ public class KafkaBinderConfigurationProperties { private boolean enableObservation; /** - * @Autowired on this constructor is necessary in order to make sure that all the optional (provided as JavaBean setters) - * properties in this class are taken into consideration when generating configuration metadata. - * In addition, in order for all the properties to be discovered and bound when running as a native - * application, this @Autowired is necessary, so that Boot binding mechanism considers all the properties. - * See the following issues for more details. + * @Autowired on this constructor is necessary for all the properties to be discovered and bound when running as a native + * application. + * + * See the following issue for more details: * - * https://github.com/spring-cloud/spring-cloud-stream/issues/2640 - * https://github.com/spring-projects/spring-boot/issues/34031 * https://github.com/spring-cloud/spring-cloud-stream/issues/2644 * * @param kafkaProperties Spring Kafka properties autoconfigured by Spring Boot diff --git a/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/main/java/org/springframework/cloud/stream/binder/reactorkafka/ReactorKafkaBinderConfiguration.java b/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/main/java/org/springframework/cloud/stream/binder/reactorkafka/ReactorKafkaBinderConfiguration.java index 3d310fb4b..5a740f897 100644 --- a/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/main/java/org/springframework/cloud/stream/binder/reactorkafka/ReactorKafkaBinderConfiguration.java +++ b/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/main/java/org/springframework/cloud/stream/binder/reactorkafka/ReactorKafkaBinderConfiguration.java @@ -19,6 +19,7 @@ package org.springframework.cloud.stream.binder.reactorkafka; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.stream.binder.Binder; import org.springframework.cloud.stream.binder.kafka.properties.KafkaBinderConfigurationProperties; @@ -41,7 +42,20 @@ import org.springframework.context.annotation.Configuration; @EnableConfigurationProperties({ KafkaProperties.class, KafkaExtendedBindingProperties.class }) public class ReactorKafkaBinderConfiguration { + /** + * @ConfigurationProperties is declared on the @Bean method for Spring Boot to ignore + * constructor binding on KafkaBinderConfigurationProperties. If constructor binding is + * used, it ignores all the JavaBeans style properties when generating configuration metadata. + * + * See the following issues for more details: + * + * https://github.com/spring-cloud/spring-cloud-stream/issues/2640 + * https://github.com/spring-projects/spring-boot/issues/34031 + * + * @param kafkaProperties Spring Kafka properties autoconfigured by Spring Boot + */ @Bean + @ConfigurationProperties(prefix = "spring.cloud.stream.kafka.binder") KafkaBinderConfigurationProperties configurationProperties( KafkaProperties kafkaProperties) { return new KafkaBinderConfigurationProperties(kafkaProperties); diff --git a/binders/kafka-binder/spring-cloud-stream-binder-kafka/src/main/java/org/springframework/cloud/stream/binder/kafka/config/KafkaBinderConfiguration.java b/binders/kafka-binder/spring-cloud-stream-binder-kafka/src/main/java/org/springframework/cloud/stream/binder/kafka/config/KafkaBinderConfiguration.java index 8db6a9932..9790ffb68 100644 --- a/binders/kafka-binder/spring-cloud-stream-binder-kafka/src/main/java/org/springframework/cloud/stream/binder/kafka/config/KafkaBinderConfiguration.java +++ b/binders/kafka-binder/spring-cloud-stream-binder-kafka/src/main/java/org/springframework/cloud/stream/binder/kafka/config/KafkaBinderConfiguration.java @@ -27,6 +27,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.stream.binder.Binder; import org.springframework.cloud.stream.binder.kafka.KafkaBinderMetrics; @@ -90,7 +91,20 @@ import org.springframework.messaging.converter.MessageConverter; @EnableConfigurationProperties({ KafkaProperties.class, KafkaExtendedBindingProperties.class }) public class KafkaBinderConfiguration { + /** + * @ConfigurationProperties is declared on the @Bean method for Spring Boot to ignore + * constructor binding on KafkaBinderConfigurationProperties. If constructor binding is + * used, it ignores all the JavaBeans style properties when generating configuration metadata. + * + * See the following issues for more details: + * + * https://github.com/spring-cloud/spring-cloud-stream/issues/2640 + * https://github.com/spring-projects/spring-boot/issues/34031 + * + * @param kafkaProperties Spring Kafka properties autoconfigured by Spring Boot + */ @Bean + @ConfigurationProperties(prefix = "spring.cloud.stream.kafka.binder") KafkaBinderConfigurationProperties configurationProperties( KafkaProperties kafkaProperties) { return new KafkaBinderConfigurationProperties(kafkaProperties);