From 1813744819be4924b331833bf83dad45f405aede Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 20 Mar 2025 15:38:36 +0000 Subject: [PATCH] Create spring-boot-kafka module --- settings.gradle | 1 + .../build.gradle | 1 + .../KafkaMetricsAutoConfiguration.java | 9 +- .../KafkaMetricsAutoConfigurationTests.java | 2 +- .../build.gradle | 3 - ...itional-spring-configuration-metadata.json | 171 ------------ ...ot.autoconfigure.AutoConfiguration.imports | 1 - .../spring-boot-dependencies/build.gradle | 1 + .../spring-boot-docs/build.gradle | 2 + .../spring-boot-kafka/build.gradle | 23 ++ ...fkaListenerContainerFactoryConfigurer.java | 8 +- ...DefaultKafkaConsumerFactoryCustomizer.java | 4 +- ...DefaultKafkaProducerFactoryCustomizer.java | 4 +- .../KafkaAnnotationDrivenConfiguration.java | 2 +- .../KafkaAutoConfiguration.java | 10 +- .../KafkaConnectionDetails.java | 10 +- .../kafka/autoconfigure}/KafkaProperties.java | 4 +- ...aStreamsAnnotationDrivenConfiguration.java | 2 +- .../PropertiesKafkaConnectionDetails.java | 4 +- .../SslBundleSslEngineFactory.java | 4 +- .../StreamsBuilderFactoryBeanCustomizer.java | 4 +- .../kafka/autoconfigure}/package-info.java | 2 +- ...itional-spring-configuration-metadata.json | 247 ++++++++++++++++++ ...ot.autoconfigure.AutoConfiguration.imports | 1 + ...stenerContainerFactoryConfigurerTests.java | 2 +- ...afkaAutoConfigurationIntegrationTests.java | 2 +- .../KafkaAutoConfigurationTests.java | 2 +- .../autoconfigure}/KafkaPropertiesTests.java | 10 +- .../spring-boot-testcontainers/build.gradle | 2 + ...nectionDetailsFactoryIntegrationTests.java | 2 +- ...nectionDetailsFactoryIntegrationTests.java | 2 +- ...nectionDetailsFactoryIntegrationTests.java | 2 +- ...nectionDetailsFactoryIntegrationTests.java | 2 +- ...afkaContainerConnectionDetailsFactory.java | 2 +- ...afkaContainerConnectionDetailsFactory.java | 2 +- ...afkaContainerConnectionDetailsFactory.java | 2 +- ...andaContainerConnectionDetailsFactory.java | 2 +- .../spring-boot-smoke-test-kafka/build.gradle | 2 +- 38 files changed, 325 insertions(+), 231 deletions(-) create mode 100644 spring-boot-project/spring-boot-kafka/build.gradle rename spring-boot-project/{spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka => spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure}/ConcurrentKafkaListenerContainerFactoryConfigurer.java (98%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka => spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure}/DefaultKafkaConsumerFactoryCustomizer.java (93%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka => spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure}/DefaultKafkaProducerFactoryCustomizer.java (93%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka => spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure}/KafkaAnnotationDrivenConfiguration.java (99%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka => spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure}/KafkaAutoConfiguration.java (97%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka => spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure}/KafkaConnectionDetails.java (97%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka => spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure}/KafkaProperties.java (99%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka => spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure}/KafkaStreamsAnnotationDrivenConfiguration.java (98%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka => spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure}/PropertiesKafkaConnectionDetails.java (96%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka => spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure}/SslBundleSslEngineFactory.java (97%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka => spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure}/StreamsBuilderFactoryBeanCustomizer.java (93%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka => spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure}/package-info.java (92%) create mode 100644 spring-boot-project/spring-boot-kafka/src/main/resources/META-INF/additional-spring-configuration-metadata.json create mode 100644 spring-boot-project/spring-boot-kafka/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports rename spring-boot-project/{spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/kafka => spring-boot-kafka/src/test/java/org/springframework/boot/kafka/autoconfigure}/ConcurrentKafkaListenerContainerFactoryConfigurerTests.java (98%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/kafka => spring-boot-kafka/src/test/java/org/springframework/boot/kafka/autoconfigure}/KafkaAutoConfigurationIntegrationTests.java (99%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/kafka => spring-boot-kafka/src/test/java/org/springframework/boot/kafka/autoconfigure}/KafkaAutoConfigurationTests.java (99%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/kafka => spring-boot-kafka/src/test/java/org/springframework/boot/kafka/autoconfigure}/KafkaPropertiesTests.java (96%) diff --git a/settings.gradle b/settings.gradle index fe54498296..15a5de9d34 100644 --- a/settings.gradle +++ b/settings.gradle @@ -60,6 +60,7 @@ include "spring-boot-project:spring-boot-jdbc" include "spring-boot-project:spring-boot-jetty" include "spring-boot-project:spring-boot-jms" include "spring-boot-project:spring-boot-jsonb" +include "spring-boot-project:spring-boot-kafka" include "spring-boot-project:spring-boot-liquibase" include "spring-boot-project:spring-boot-mail" include "spring-boot-project:spring-boot-parent" diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/build.gradle b/spring-boot-project/spring-boot-actuator-autoconfigure/build.gradle index 075bcac820..7eef8b781b 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/build.gradle +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/build.gradle @@ -26,6 +26,7 @@ dependencies { optional(project(":spring-boot-project:spring-boot-jdbc")) optional(project(":spring-boot-project:spring-boot-jetty")) optional(project(":spring-boot-project:spring-boot-jsonb")) + optional(project(":spring-boot-project:spring-boot-kafka")) optional(project(":spring-boot-project:spring-boot-liquibase")) optional(project(":spring-boot-project:spring-boot-mail")) optional(project(":spring-boot-project:spring-boot-reactor-netty")) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/KafkaMetricsAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/KafkaMetricsAutoConfiguration.java index fc5c39ca77..d90fba42b5 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/KafkaMetricsAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/KafkaMetricsAutoConfiguration.java @@ -23,10 +23,9 @@ import io.micrometer.core.instrument.binder.kafka.KafkaStreamsMetrics; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.kafka.DefaultKafkaConsumerFactoryCustomizer; -import org.springframework.boot.autoconfigure.kafka.DefaultKafkaProducerFactoryCustomizer; -import org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration; -import org.springframework.boot.autoconfigure.kafka.StreamsBuilderFactoryBeanCustomizer; +import org.springframework.boot.kafka.autoconfigure.DefaultKafkaConsumerFactoryCustomizer; +import org.springframework.boot.kafka.autoconfigure.DefaultKafkaProducerFactoryCustomizer; +import org.springframework.boot.kafka.autoconfigure.StreamsBuilderFactoryBeanCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.kafka.config.StreamsBuilderFactoryBean; @@ -45,7 +44,7 @@ import org.springframework.kafka.streams.KafkaStreamsMicrometerListener; * @author Eddú Meléndez * @since 2.1.0 */ -@AutoConfiguration(before = KafkaAutoConfiguration.class, +@AutoConfiguration(beforeName = "org.springframework.boot.kafka.autoconfigure.KafkaAutoConfiguration", after = { MetricsAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class }) @ConditionalOnClass({ KafkaClientMetrics.class, ProducerFactory.class }) @ConditionalOnBean(MeterRegistry.class) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/KafkaMetricsAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/KafkaMetricsAutoConfigurationTests.java index 2b23092193..0b1d7cac7c 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/KafkaMetricsAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/KafkaMetricsAutoConfigurationTests.java @@ -26,7 +26,7 @@ import org.junit.jupiter.api.Test; import org.springframework.boot.actuate.autoconfigure.metrics.test.MetricsRun; import org.springframework.boot.autoconfigure.AutoConfigurations; -import org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration; +import org.springframework.boot.kafka.autoconfigure.KafkaAutoConfiguration; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/spring-boot-project/spring-boot-autoconfigure-all/build.gradle b/spring-boot-project/spring-boot-autoconfigure-all/build.gradle index b4e79d468a..5117b8c0fd 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/build.gradle +++ b/spring-boot-project/spring-boot-autoconfigure-all/build.gradle @@ -92,7 +92,6 @@ dependencies { optional("org.apache.commons:commons-dbcp2") optional("org.apache.httpcomponents.client5:httpclient5") optional("org.apache.httpcomponents.core5:httpcore5-reactive") - optional("org.apache.kafka:kafka-streams") optional("org.apache.tomcat.embed:tomcat-embed-core") optional("org.apache.tomcat.embed:tomcat-embed-el") optional("org.apache.tomcat.embed:tomcat-embed-websocket") @@ -205,7 +204,6 @@ dependencies { optional("org.springframework.session:spring-session-jdbc") optional("org.springframework.amqp:spring-rabbit") optional("org.springframework.amqp:spring-rabbit-stream") - optional("org.springframework.kafka:spring-kafka") optional("org.springframework.ws:spring-ws-core") { exclude group: "com.sun.mail", module: "jakarta.mail" exclude group: "jakarta.platform", module: "jakarta.jakartaee-api" @@ -246,7 +244,6 @@ dependencies { testImplementation("org.postgresql:postgresql") testImplementation("org.postgresql:r2dbc-postgresql") testImplementation("org.springframework.graphql:spring-graphql-test") - testImplementation("org.springframework.kafka:spring-kafka-test") testImplementation("org.springframework.pulsar:spring-pulsar-cache-provider-caffeine") testImplementation("org.springframework.security:spring-security-test") testImplementation("org.yaml:snakeyaml") diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 0baa340aed..6caa139fdc 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -927,177 +927,6 @@ "reason": "Narayana support has moved to third party starter." } }, - { - "name": "spring.kafka.admin.ssl.keystore-location", - "type": "org.springframework.core.io.Resource", - "description": "Location of the key store file.", - "deprecation": { - "replacement": "spring.kafka.admin.ssl.key-store-location", - "level": "error" - } - }, - { - "name": "spring.kafka.admin.ssl.keystore-password", - "type": "java.lang.String", - "description": "Store password for the key store file.", - "deprecation": { - "replacement": "spring.kafka.admin.ssl.key-store-password", - "level": "error" - } - }, - { - "name": "spring.kafka.admin.ssl.truststore-location", - "type": "org.springframework.core.io.Resource", - "description": "Location of the trust store file.", - "deprecation": { - "replacement": "spring.kafka.admin.ssl.trust-store-location", - "level": "error" - } - }, - { - "name": "spring.kafka.admin.ssl.truststore-password", - "type": "java.lang.String", - "description": "Store password for the trust store file.", - "deprecation": { - "replacement": "spring.kafka.admin.ssl.trust-store-password", - "level": "error" - } - }, - { - "name": "spring.kafka.consumer.ssl.keystore-location", - "type": "org.springframework.core.io.Resource", - "description": "Location of the key store file.", - "deprecation": { - "replacement": "spring.kafka.consumer.ssl.key-store-location", - "level": "error" - } - }, - { - "name": "spring.kafka.consumer.ssl.keystore-password", - "type": "java.lang.String", - "description": "Store password for the key store file.", - "deprecation": { - "replacement": "spring.kafka.consumer.ssl.key-store-password", - "level": "error" - } - }, - { - "name": "spring.kafka.consumer.ssl.truststore-location", - "type": "org.springframework.core.io.Resource", - "description": "Location of the trust store file.", - "deprecation": { - "replacement": "spring.kafka.consumer.ssl.trust-store-location", - "level": "error" - } - }, - { - "name": "spring.kafka.consumer.ssl.truststore-password", - "type": "java.lang.String", - "description": "Store password for the trust store file.", - "deprecation": { - "replacement": "spring.kafka.consumer.ssl.trust-store-password", - "level": "error" - } - }, - { - "name": "spring.kafka.listener.only-log-record-metadata", - "type": "java.lang.Boolean", - "defaultValue": true, - "description": "Whether to suppress the entire record from being written to the log when retries are being attempted.", - "deprecation": { - "reason": "Use KafkaUtils#setConsumerRecordFormatter instead.", - "level": "error" - } - }, - { - "name": "spring.kafka.producer.ssl.keystore-location", - "type": "org.springframework.core.io.Resource", - "description": "Location of the key store file.", - "deprecation": { - "replacement": "spring.kafka.producer.ssl.key-store-location", - "level": "error" - } - }, - { - "name": "spring.kafka.producer.ssl.keystore-password", - "type": "java.lang.String", - "description": "Store password for the key store file.", - "deprecation": { - "replacement": "spring.kafka.producer.ssl.key-store-password", - "level": "error" - } - }, - { - "name": "spring.kafka.producer.ssl.truststore-location", - "type": "org.springframework.core.io.Resource", - "description": "Location of the trust store file.", - "deprecation": { - "replacement": "spring.kafka.producer.ssl.trust-store-location", - "level": "error" - } - }, - { - "name": "spring.kafka.producer.ssl.truststore-password", - "type": "java.lang.String", - "description": "Store password for the trust store file.", - "deprecation": { - "replacement": "spring.kafka.producer.ssl.trust-store-password", - "level": "error" - } - }, - { - "name": "spring.kafka.ssl.keystore-location", - "type": "org.springframework.core.io.Resource", - "description": "Location of the key store file.", - "deprecation": { - "replacement": "spring.kafka.ssl.key-store-location", - "level": "error" - } - }, - { - "name": "spring.kafka.ssl.keystore-password", - "type": "java.lang.String", - "description": "Store password for the key store file.", - "deprecation": { - "replacement": "spring.kafka.ssl.key-store-password", - "level": "error" - } - }, - { - "name": "spring.kafka.ssl.truststore-location", - "type": "org.springframework.core.io.Resource", - "description": "Location of the trust store file.", - "deprecation": { - "replacement": "spring.kafka.ssl.trust-store-location", - "level": "error" - } - }, - { - "name": "spring.kafka.ssl.truststore-password", - "type": "java.lang.String", - "description": "Store password for the trust store file.", - "deprecation": { - "replacement": "spring.kafka.ssl.trust-store-password", - "level": "error" - } - }, - { - "name": "spring.kafka.streams.cache-max-bytes-buffering", - "type": "java.lang.Integer", - "deprecation": { - "replacement": "spring.kafka.streams.state-store-cache-max-size", - "level": "error" - } - }, - { - "name": "spring.kafka.streams.cache-max-size-buffering", - "type": "java.lang.Integer", - "deprecation": { - "replacement": "spring.kafka.streams.state-store-cache-max-size", - "level": "error", - "since": "3.1.0" - } - }, { "name": "spring.mustache.prefix", "defaultValue": "classpath:/templates/" diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index e55a789c8b..fba846878d 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -58,7 +58,6 @@ org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration org.springframework.boot.autoconfigure.jooq.JooqAutoConfiguration -org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration org.springframework.boot.autoconfigure.ldap.embedded.EmbeddedLdapAutoConfiguration org.springframework.boot.autoconfigure.ldap.LdapAutoConfiguration org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration diff --git a/spring-boot-project/spring-boot-dependencies/build.gradle b/spring-boot-project/spring-boot-dependencies/build.gradle index 3c83a6cacc..6e382ee753 100644 --- a/spring-boot-project/spring-boot-dependencies/build.gradle +++ b/spring-boot-project/spring-boot-dependencies/build.gradle @@ -1996,6 +1996,7 @@ bom { "spring-boot-jetty", "spring-boot-jms", "spring-boot-jsonb", + "spring-boot-kafka", "spring-boot-liquibase", "spring-boot-loader", "spring-boot-loader-classic", diff --git a/spring-boot-project/spring-boot-docs/build.gradle b/spring-boot-project/spring-boot-docs/build.gradle index dd3ccbd9fb..f5ed88bd1e 100644 --- a/spring-boot-project/spring-boot-docs/build.gradle +++ b/spring-boot-project/spring-boot-docs/build.gradle @@ -74,6 +74,7 @@ dependencies { autoConfiguration(project(path: ":spring-boot-project:spring-boot-jetty", configuration: "autoConfigurationMetadata")) autoConfiguration(project(path: ":spring-boot-project:spring-boot-jms", configuration: "autoConfigurationMetadata")) autoConfiguration(project(path: ":spring-boot-project:spring-boot-jsonb", configuration: "autoConfigurationMetadata")) + autoConfiguration(project(path: ":spring-boot-project:spring-boot-kafka", configuration: "autoConfigurationMetadata")) autoConfiguration(project(path: ":spring-boot-project:spring-boot-liquibase", configuration: "autoConfigurationMetadata")) autoConfiguration(project(path: ":spring-boot-project:spring-boot-mail", configuration: "autoConfigurationMetadata")) autoConfiguration(project(path: ":spring-boot-project:spring-boot-reactor-netty", configuration: "autoConfigurationMetadata")) @@ -100,6 +101,7 @@ dependencies { configurationProperties(project(path: ":spring-boot-project:spring-boot-jdbc", configuration: "configurationPropertiesMetadata")) configurationProperties(project(path: ":spring-boot-project:spring-boot-jetty", configuration: "configurationPropertiesMetadata")) configurationProperties(project(path: ":spring-boot-project:spring-boot-jms", configuration: "configurationPropertiesMetadata")) + configurationProperties(project(path: ":spring-boot-project:spring-boot-kafka", configuration: "configurationPropertiesMetadata")) configurationProperties(project(path: ":spring-boot-project:spring-boot-liquibase", configuration: "configurationPropertiesMetadata")) configurationProperties(project(path: ":spring-boot-project:spring-boot-mail", configuration: "configurationPropertiesMetadata")) configurationProperties(project(path: ":spring-boot-project:spring-boot-reactor-netty", configuration: "configurationPropertiesMetadata")) diff --git a/spring-boot-project/spring-boot-kafka/build.gradle b/spring-boot-project/spring-boot-kafka/build.gradle new file mode 100644 index 0000000000..ea1fdc2504 --- /dev/null +++ b/spring-boot-project/spring-boot-kafka/build.gradle @@ -0,0 +1,23 @@ +plugins { + id "java-library" + id "org.springframework.boot.auto-configuration" + id "org.springframework.boot.configuration-properties" + id "org.springframework.boot.deployed" + id "org.springframework.boot.optional-dependencies" +} + +description = "Spring Boot Kafka" + +dependencies { + api(project(":spring-boot-project:spring-boot")) + api("org.springframework.kafka:spring-kafka") + + optional(project(":spring-boot-project:spring-boot-autoconfigure")) + optional("org.apache.kafka:kafka-streams") + + testImplementation(project(":spring-boot-project:spring-boot-test")) + testImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-test-support")) + testImplementation("org.springframework.kafka:spring-kafka-test") + + testRuntimeOnly("ch.qos.logback:logback-classic") +} diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/ConcurrentKafkaListenerContainerFactoryConfigurer.java b/spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/ConcurrentKafkaListenerContainerFactoryConfigurer.java similarity index 98% rename from spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/ConcurrentKafkaListenerContainerFactoryConfigurer.java rename to spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/ConcurrentKafkaListenerContainerFactoryConfigurer.java index f65563521b..0998202ee7 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/ConcurrentKafkaListenerContainerFactoryConfigurer.java +++ b/spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/ConcurrentKafkaListenerContainerFactoryConfigurer.java @@ -14,13 +14,13 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.kafka; +package org.springframework.boot.kafka.autoconfigure; import java.time.Duration; import java.util.function.Function; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties.Listener; import org.springframework.boot.context.properties.PropertyMapper; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties.Listener; import org.springframework.core.task.SimpleAsyncTaskExecutor; import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory; import org.springframework.kafka.core.ConsumerFactory; @@ -49,7 +49,7 @@ import org.springframework.kafka.transaction.KafkaAwareTransactionManager; * @author Eddú Meléndez * @author Thomas Kåsene * @author Moritz Halbritter - * @since 1.5.0 + * @since 4.0.0 */ public class ConcurrentKafkaListenerContainerFactoryConfigurer { @@ -130,7 +130,6 @@ public class ConcurrentKafkaListenerContainerFactoryConfigurer { /** * Set the {@link ConsumerAwareRebalanceListener} to use. * @param rebalanceListener the rebalance listener. - * @since 2.2 */ void setRebalanceListener(ConsumerAwareRebalanceListener rebalanceListener) { this.rebalanceListener = rebalanceListener; @@ -139,7 +138,6 @@ public class ConcurrentKafkaListenerContainerFactoryConfigurer { /** * Set the {@link CommonErrorHandler} to use. * @param commonErrorHandler the error handler. - * @since 2.6.0 */ public void setCommonErrorHandler(CommonErrorHandler commonErrorHandler) { this.commonErrorHandler = commonErrorHandler; diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/DefaultKafkaConsumerFactoryCustomizer.java b/spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/DefaultKafkaConsumerFactoryCustomizer.java similarity index 93% rename from spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/DefaultKafkaConsumerFactoryCustomizer.java rename to spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/DefaultKafkaConsumerFactoryCustomizer.java index 7151054f13..a43cf902ba 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/DefaultKafkaConsumerFactoryCustomizer.java +++ b/spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/DefaultKafkaConsumerFactoryCustomizer.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.kafka; +package org.springframework.boot.kafka.autoconfigure; import org.springframework.kafka.core.DefaultKafkaConsumerFactory; @@ -22,7 +22,7 @@ import org.springframework.kafka.core.DefaultKafkaConsumerFactory; * Callback interface for customizing {@code DefaultKafkaConsumerFactory} beans. * * @author Stephane Nicoll - * @since 2.3.0 + * @since 4.0.0 */ @FunctionalInterface public interface DefaultKafkaConsumerFactoryCustomizer { diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/DefaultKafkaProducerFactoryCustomizer.java b/spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/DefaultKafkaProducerFactoryCustomizer.java similarity index 93% rename from spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/DefaultKafkaProducerFactoryCustomizer.java rename to spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/DefaultKafkaProducerFactoryCustomizer.java index 7865947b1e..4521953569 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/DefaultKafkaProducerFactoryCustomizer.java +++ b/spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/DefaultKafkaProducerFactoryCustomizer.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.kafka; +package org.springframework.boot.kafka.autoconfigure; import org.springframework.kafka.core.DefaultKafkaProducerFactory; @@ -22,7 +22,7 @@ import org.springframework.kafka.core.DefaultKafkaProducerFactory; * Callback interface for customizing {@code DefaultKafkaProducerFactory} beans. * * @author Stephane Nicoll - * @since 2.3.0 + * @since 4.0.0 */ @FunctionalInterface public interface DefaultKafkaProducerFactoryCustomizer { diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/KafkaAnnotationDrivenConfiguration.java b/spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/KafkaAnnotationDrivenConfiguration.java similarity index 99% rename from spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/KafkaAnnotationDrivenConfiguration.java rename to spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/KafkaAnnotationDrivenConfiguration.java index 94a746901d..8ba16baa16 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/KafkaAnnotationDrivenConfiguration.java +++ b/spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/KafkaAnnotationDrivenConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.kafka; +package org.springframework.boot.kafka.autoconfigure; import java.util.function.Function; diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/KafkaAutoConfiguration.java b/spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/KafkaAutoConfiguration.java similarity index 97% rename from spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/KafkaAutoConfiguration.java rename to spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/KafkaAutoConfiguration.java index e90e16a496..24d039341b 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/KafkaAutoConfiguration.java +++ b/spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/KafkaAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.kafka; +package org.springframework.boot.kafka.autoconfigure; import java.io.IOException; import java.time.Duration; @@ -36,11 +36,11 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate; -import org.springframework.boot.autoconfigure.kafka.KafkaConnectionDetails.Configuration; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties.Jaas; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties.Retry.Topic.Backoff; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.PropertyMapper; +import org.springframework.boot.kafka.autoconfigure.KafkaConnectionDetails.Configuration; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties.Jaas; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties.Retry.Topic.Backoff; import org.springframework.boot.ssl.SslBundle; import org.springframework.boot.ssl.SslBundles; import org.springframework.context.annotation.Bean; @@ -76,7 +76,7 @@ import org.springframework.util.StringUtils; * @author Phillip Webb * @author Andy Wilkinson * @author Scott Frederick - * @since 1.5.0 + * @since 4.0.0 */ @AutoConfiguration @ConditionalOnClass(KafkaTemplate.class) diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/KafkaConnectionDetails.java b/spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/KafkaConnectionDetails.java similarity index 97% rename from spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/KafkaConnectionDetails.java rename to spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/KafkaConnectionDetails.java index 5f274f891a..b015a45663 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/KafkaConnectionDetails.java +++ b/spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/KafkaConnectionDetails.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.kafka; +package org.springframework.boot.kafka.autoconfigure; import java.util.List; @@ -27,7 +27,7 @@ import org.springframework.boot.ssl.SslBundle; * @author Moritz Halbritter * @author Andy Wilkinson * @author Phillip Webb - * @since 3.1.0 + * @since 4.0.0 */ public interface KafkaConnectionDetails extends ConnectionDetails { @@ -40,7 +40,6 @@ public interface KafkaConnectionDetails extends ConnectionDetails { /** * Returns the SSL bundle. * @return the SSL bundle - * @since 3.5.0 */ default SslBundle getSslBundle() { return null; @@ -49,7 +48,6 @@ public interface KafkaConnectionDetails extends ConnectionDetails { /** * Returns the security protocol. * @return the security protocol - * @since 3.5.0 */ default String getSecurityProtocol() { return null; @@ -58,7 +56,6 @@ public interface KafkaConnectionDetails extends ConnectionDetails { /** * Returns the consumer configuration. * @return the consumer configuration - * @since 3.5.0 */ default Configuration getConsumer() { return Configuration.of(getBootstrapServers(), getSslBundle(), getSecurityProtocol()); @@ -67,7 +64,6 @@ public interface KafkaConnectionDetails extends ConnectionDetails { /** * Returns the producer configuration. * @return the producer configuration - * @since 3.5.0 */ default Configuration getProducer() { return Configuration.of(getBootstrapServers(), getSslBundle(), getSecurityProtocol()); @@ -76,7 +72,6 @@ public interface KafkaConnectionDetails extends ConnectionDetails { /** * Returns the admin configuration. * @return the admin configuration - * @since 3.5.0 */ default Configuration getAdmin() { return Configuration.of(getBootstrapServers(), getSslBundle(), getSecurityProtocol()); @@ -85,7 +80,6 @@ public interface KafkaConnectionDetails extends ConnectionDetails { /** * Returns the Kafka Streams configuration. * @return the Kafka Streams configuration - * @since 3.5.0 */ default Configuration getStreams() { return Configuration.of(getBootstrapServers(), getSslBundle(), getSecurityProtocol()); diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/KafkaProperties.java b/spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/KafkaProperties.java similarity index 99% rename from spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/KafkaProperties.java rename to spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/KafkaProperties.java index 95113f0dbf..ac5c7db045 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/KafkaProperties.java +++ b/spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/KafkaProperties.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.kafka; +package org.springframework.boot.kafka.autoconfigure; import java.io.IOException; import java.time.Duration; @@ -60,7 +60,7 @@ import org.springframework.util.unit.DataSize; * @author Andy Wilkinson * @author Scott Frederick * @author Yanming Zhou - * @since 1.5.0 + * @since 4.0.0 */ @ConfigurationProperties("spring.kafka") public class KafkaProperties { diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/KafkaStreamsAnnotationDrivenConfiguration.java b/spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/KafkaStreamsAnnotationDrivenConfiguration.java similarity index 98% rename from spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/KafkaStreamsAnnotationDrivenConfiguration.java rename to spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/KafkaStreamsAnnotationDrivenConfiguration.java index a3078a0dad..47a0fea58c 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/KafkaStreamsAnnotationDrivenConfiguration.java +++ b/spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/KafkaStreamsAnnotationDrivenConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.kafka; +package org.springframework.boot.kafka.autoconfigure; import java.util.Map; diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/PropertiesKafkaConnectionDetails.java b/spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/PropertiesKafkaConnectionDetails.java similarity index 96% rename from spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/PropertiesKafkaConnectionDetails.java rename to spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/PropertiesKafkaConnectionDetails.java index 310e107aaf..8844d1d1a7 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/PropertiesKafkaConnectionDetails.java +++ b/spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/PropertiesKafkaConnectionDetails.java @@ -14,11 +14,11 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.kafka; +package org.springframework.boot.kafka.autoconfigure; import java.util.List; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties.Ssl; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties.Ssl; import org.springframework.boot.ssl.SslBundle; import org.springframework.boot.ssl.SslBundles; import org.springframework.util.Assert; diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/SslBundleSslEngineFactory.java b/spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/SslBundleSslEngineFactory.java similarity index 97% rename from spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/SslBundleSslEngineFactory.java rename to spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/SslBundleSslEngineFactory.java index 5c5e93ebf5..cf2054e9cb 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/SslBundleSslEngineFactory.java +++ b/spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/SslBundleSslEngineFactory.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.kafka; +package org.springframework.boot.kafka.autoconfigure; import java.io.IOException; import java.security.KeyStore; @@ -34,7 +34,7 @@ import org.springframework.boot.ssl.SslBundle; * * @author Andy Wilkinson * @author Scott Frederick - * @since 3.2.0 + * @since 4.0.0 */ public class SslBundleSslEngineFactory implements SslEngineFactory { diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/StreamsBuilderFactoryBeanCustomizer.java b/spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/StreamsBuilderFactoryBeanCustomizer.java similarity index 93% rename from spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/StreamsBuilderFactoryBeanCustomizer.java rename to spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/StreamsBuilderFactoryBeanCustomizer.java index 789eb846d7..bcd05e28cf 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/StreamsBuilderFactoryBeanCustomizer.java +++ b/spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/StreamsBuilderFactoryBeanCustomizer.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.kafka; +package org.springframework.boot.kafka.autoconfigure; import org.springframework.kafka.config.StreamsBuilderFactoryBean; @@ -22,7 +22,7 @@ import org.springframework.kafka.config.StreamsBuilderFactoryBean; * Callback interface for customizing {@code StreamsBuilderFactoryBean} beans. * * @author Eddú Meléndez - * @since 2.3.2 + * @since 4.0.0 */ @FunctionalInterface public interface StreamsBuilderFactoryBeanCustomizer { diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/package-info.java b/spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/package-info.java similarity index 92% rename from spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/package-info.java rename to spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/package-info.java index 3e2974e0ea..e9cf53fc1b 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/kafka/package-info.java +++ b/spring-boot-project/spring-boot-kafka/src/main/java/org/springframework/boot/kafka/autoconfigure/package-info.java @@ -17,4 +17,4 @@ /** * Auto-configuration for Apache Kafka. */ -package org.springframework.boot.autoconfigure.kafka; +package org.springframework.boot.kafka.autoconfigure; diff --git a/spring-boot-project/spring-boot-kafka/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-boot-project/spring-boot-kafka/src/main/resources/META-INF/additional-spring-configuration-metadata.json new file mode 100644 index 0000000000..ae0fba2052 --- /dev/null +++ b/spring-boot-project/spring-boot-kafka/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -0,0 +1,247 @@ +{ + "properties": [ + { + "name": "spring.kafka.admin.ssl.keystore-location", + "type": "org.springframework.core.io.Resource", + "description": "Location of the key store file.", + "deprecation": { + "replacement": "spring.kafka.admin.ssl.key-store-location", + "level": "error" + } + }, + { + "name": "spring.kafka.admin.ssl.keystore-password", + "type": "java.lang.String", + "description": "Store password for the key store file.", + "deprecation": { + "replacement": "spring.kafka.admin.ssl.key-store-password", + "level": "error" + } + }, + { + "name": "spring.kafka.admin.ssl.truststore-location", + "type": "org.springframework.core.io.Resource", + "description": "Location of the trust store file.", + "deprecation": { + "replacement": "spring.kafka.admin.ssl.trust-store-location", + "level": "error" + } + }, + { + "name": "spring.kafka.admin.ssl.truststore-password", + "type": "java.lang.String", + "description": "Store password for the trust store file.", + "deprecation": { + "replacement": "spring.kafka.admin.ssl.trust-store-password", + "level": "error" + } + }, + { + "name": "spring.kafka.consumer.ssl.keystore-location", + "type": "org.springframework.core.io.Resource", + "description": "Location of the key store file.", + "deprecation": { + "replacement": "spring.kafka.consumer.ssl.key-store-location", + "level": "error" + } + }, + { + "name": "spring.kafka.consumer.ssl.keystore-password", + "type": "java.lang.String", + "description": "Store password for the key store file.", + "deprecation": { + "replacement": "spring.kafka.consumer.ssl.key-store-password", + "level": "error" + } + }, + { + "name": "spring.kafka.consumer.ssl.truststore-location", + "type": "org.springframework.core.io.Resource", + "description": "Location of the trust store file.", + "deprecation": { + "replacement": "spring.kafka.consumer.ssl.trust-store-location", + "level": "error" + } + }, + { + "name": "spring.kafka.consumer.ssl.truststore-password", + "type": "java.lang.String", + "description": "Store password for the trust store file.", + "deprecation": { + "replacement": "spring.kafka.consumer.ssl.trust-store-password", + "level": "error" + } + }, + { + "name": "spring.kafka.listener.only-log-record-metadata", + "type": "java.lang.Boolean", + "defaultValue": true, + "description": "Whether to suppress the entire record from being written to the log when retries are being attempted.", + "deprecation": { + "reason": "Use KafkaUtils#setConsumerRecordFormatter instead.", + "level": "error" + } + }, + { + "name": "spring.kafka.producer.ssl.keystore-location", + "type": "org.springframework.core.io.Resource", + "description": "Location of the key store file.", + "deprecation": { + "replacement": "spring.kafka.producer.ssl.key-store-location", + "level": "error" + } + }, + { + "name": "spring.kafka.producer.ssl.keystore-password", + "type": "java.lang.String", + "description": "Store password for the key store file.", + "deprecation": { + "replacement": "spring.kafka.producer.ssl.key-store-password", + "level": "error" + } + }, + { + "name": "spring.kafka.producer.ssl.truststore-location", + "type": "org.springframework.core.io.Resource", + "description": "Location of the trust store file.", + "deprecation": { + "replacement": "spring.kafka.producer.ssl.trust-store-location", + "level": "error" + } + }, + { + "name": "spring.kafka.producer.ssl.truststore-password", + "type": "java.lang.String", + "description": "Store password for the trust store file.", + "deprecation": { + "replacement": "spring.kafka.producer.ssl.trust-store-password", + "level": "error" + } + }, + { + "name": "spring.kafka.ssl.keystore-location", + "type": "org.springframework.core.io.Resource", + "description": "Location of the key store file.", + "deprecation": { + "replacement": "spring.kafka.ssl.key-store-location", + "level": "error" + } + }, + { + "name": "spring.kafka.ssl.keystore-password", + "type": "java.lang.String", + "description": "Store password for the key store file.", + "deprecation": { + "replacement": "spring.kafka.ssl.key-store-password", + "level": "error" + } + }, + { + "name": "spring.kafka.ssl.truststore-location", + "type": "org.springframework.core.io.Resource", + "description": "Location of the trust store file.", + "deprecation": { + "replacement": "spring.kafka.ssl.trust-store-location", + "level": "error" + } + }, + { + "name": "spring.kafka.ssl.truststore-password", + "type": "java.lang.String", + "description": "Store password for the trust store file.", + "deprecation": { + "replacement": "spring.kafka.ssl.trust-store-password", + "level": "error" + } + }, + { + "name": "spring.kafka.streams.cache-max-bytes-buffering", + "type": "java.lang.Integer", + "deprecation": { + "replacement": "spring.kafka.streams.state-store-cache-max-size", + "level": "error" + } + }, + { + "name": "spring.kafka.streams.cache-max-size-buffering", + "type": "java.lang.Integer", + "deprecation": { + "replacement": "spring.kafka.streams.state-store-cache-max-size", + "level": "error", + "since": "3.1.0" + } + } + ], + "hints": [ + { + "name": "spring.kafka.consumer.auto-offset-reset", + "values": [ + { + "value": "earliest", + "description": "Automatically reset the offset to the earliest offset." + }, + { + "value": "latest", + "description": "Automatically reset the offset to the latest offset." + }, + { + "value": "none", + "description": "Throw exception to the consumer if no previous offset is found for the consumer's group." + }, + { + "value": "exception", + "description": "Throw exception to the consumer." + } + ], + "providers": [ + { + "name": "any" + } + ] + }, + { + "name": "spring.kafka.consumer.key-deserializer", + "providers": [ + { + "name": "handle-as", + "parameters": { + "target": "org.apache.kafka.common.serialization.Deserializer" + } + } + ] + }, + { + "name": "spring.kafka.consumer.value-deserializer", + "providers": [ + { + "name": "handle-as", + "parameters": { + "target": "org.apache.kafka.common.serialization.Deserializer" + } + } + ] + }, + { + "name": "spring.kafka.producer.key-serializer", + "providers": [ + { + "name": "handle-as", + "parameters": { + "target": "org.apache.kafka.common.serialization.Serializer" + } + } + ] + }, + { + "name": "spring.kafka.producer.value-serializer", + "providers": [ + { + "name": "handle-as", + "parameters": { + "target": "org.apache.kafka.common.serialization.Serializer" + } + } + ] + } + ] +} \ No newline at end of file diff --git a/spring-boot-project/spring-boot-kafka/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/spring-boot-project/spring-boot-kafka/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000000..69bdd42c8f --- /dev/null +++ b/spring-boot-project/spring-boot-kafka/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +org.springframework.boot.kafka.autoconfigure.KafkaAutoConfiguration diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/kafka/ConcurrentKafkaListenerContainerFactoryConfigurerTests.java b/spring-boot-project/spring-boot-kafka/src/test/java/org/springframework/boot/kafka/autoconfigure/ConcurrentKafkaListenerContainerFactoryConfigurerTests.java similarity index 98% rename from spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/kafka/ConcurrentKafkaListenerContainerFactoryConfigurerTests.java rename to spring-boot-project/spring-boot-kafka/src/test/java/org/springframework/boot/kafka/autoconfigure/ConcurrentKafkaListenerContainerFactoryConfigurerTests.java index 42d9c1a903..875ec8e515 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/kafka/ConcurrentKafkaListenerContainerFactoryConfigurerTests.java +++ b/spring-boot-project/spring-boot-kafka/src/test/java/org/springframework/boot/kafka/autoconfigure/ConcurrentKafkaListenerContainerFactoryConfigurerTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.kafka; +package org.springframework.boot.kafka.autoconfigure; import java.time.Duration; import java.util.function.Function; diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/kafka/KafkaAutoConfigurationIntegrationTests.java b/spring-boot-project/spring-boot-kafka/src/test/java/org/springframework/boot/kafka/autoconfigure/KafkaAutoConfigurationIntegrationTests.java similarity index 99% rename from spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/kafka/KafkaAutoConfigurationIntegrationTests.java rename to spring-boot-project/spring-boot-kafka/src/test/java/org/springframework/boot/kafka/autoconfigure/KafkaAutoConfigurationIntegrationTests.java index 02ff536183..cf1dcb368b 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/kafka/KafkaAutoConfigurationIntegrationTests.java +++ b/spring-boot-project/spring-boot-kafka/src/test/java/org/springframework/boot/kafka/autoconfigure/KafkaAutoConfigurationIntegrationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.kafka; +package org.springframework.boot.kafka.autoconfigure; import java.util.ArrayList; import java.util.List; diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/kafka/KafkaAutoConfigurationTests.java b/spring-boot-project/spring-boot-kafka/src/test/java/org/springframework/boot/kafka/autoconfigure/KafkaAutoConfigurationTests.java similarity index 99% rename from spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/kafka/KafkaAutoConfigurationTests.java rename to spring-boot-project/spring-boot-kafka/src/test/java/org/springframework/boot/kafka/autoconfigure/KafkaAutoConfigurationTests.java index 49e32c0236..da8e164fe9 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/kafka/KafkaAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-kafka/src/test/java/org/springframework/boot/kafka/autoconfigure/KafkaAutoConfigurationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.kafka; +package org.springframework.boot.kafka.autoconfigure; import java.io.File; import java.time.Duration; diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/kafka/KafkaPropertiesTests.java b/spring-boot-project/spring-boot-kafka/src/test/java/org/springframework/boot/kafka/autoconfigure/KafkaPropertiesTests.java similarity index 96% rename from spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/kafka/KafkaPropertiesTests.java rename to spring-boot-project/spring-boot-kafka/src/test/java/org/springframework/boot/kafka/autoconfigure/KafkaPropertiesTests.java index a536e0786e..105bfd9bc8 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/kafka/KafkaPropertiesTests.java +++ b/spring-boot-project/spring-boot-kafka/src/test/java/org/springframework/boot/kafka/autoconfigure/KafkaPropertiesTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.kafka; +package org.springframework.boot.kafka.autoconfigure; import java.util.Collections; import java.util.Map; @@ -22,11 +22,11 @@ import java.util.Map; import org.apache.kafka.common.config.SslConfigs; import org.junit.jupiter.api.Test; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties.Admin; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties.Cleanup; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties.IsolationLevel; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties.Listener; import org.springframework.boot.context.properties.source.MutuallyExclusiveConfigurationPropertiesException; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties.Admin; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties.Cleanup; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties.IsolationLevel; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties.Listener; import org.springframework.boot.ssl.DefaultSslBundleRegistry; import org.springframework.boot.ssl.SslBundle; import org.springframework.core.io.ClassPathResource; diff --git a/spring-boot-project/spring-boot-testcontainers/build.gradle b/spring-boot-project/spring-boot-testcontainers/build.gradle index 792f386c6e..e78cc9bf52 100644 --- a/spring-boot-project/spring-boot-testcontainers/build.gradle +++ b/spring-boot-project/spring-boot-testcontainers/build.gradle @@ -15,6 +15,7 @@ dependencies { dockerTestImplementation(project(":spring-boot-project:spring-boot-flyway")) dockerTestImplementation(project(":spring-boot-project:spring-boot-jdbc")) + dockerTestImplementation(project(":spring-boot-project:spring-boot-kafka")) dockerTestImplementation(project(":spring-boot-project:spring-boot-liquibase")) dockerTestImplementation(project(":spring-boot-project:spring-boot-test")) dockerTestImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-test-support-docker")) @@ -60,6 +61,7 @@ dependencies { optional(project(":spring-boot-project:spring-boot-elasticsearch")) optional(project(":spring-boot-project:spring-boot-flyway")) optional(project(":spring-boot-project:spring-boot-jdbc")) + optional(project(":spring-boot-project:spring-boot-kafka")) optional(project(":spring-boot-project:spring-boot-liquibase")) optional(project(":spring-boot-project:spring-boot-tx")) optional("org.springframework:spring-test") diff --git a/spring-boot-project/spring-boot-testcontainers/src/dockerTest/java/org/springframework/boot/testcontainers/service/connection/kafka/ApacheKafkaContainerConnectionDetailsFactoryIntegrationTests.java b/spring-boot-project/spring-boot-testcontainers/src/dockerTest/java/org/springframework/boot/testcontainers/service/connection/kafka/ApacheKafkaContainerConnectionDetailsFactoryIntegrationTests.java index d759a62a1c..e2cc4d2d49 100644 --- a/spring-boot-project/spring-boot-testcontainers/src/dockerTest/java/org/springframework/boot/testcontainers/service/connection/kafka/ApacheKafkaContainerConnectionDetailsFactoryIntegrationTests.java +++ b/spring-boot-project/spring-boot-testcontainers/src/dockerTest/java/org/springframework/boot/testcontainers/service/connection/kafka/ApacheKafkaContainerConnectionDetailsFactoryIntegrationTests.java @@ -28,7 +28,7 @@ import org.testcontainers.kafka.KafkaContainer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; -import org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration; +import org.springframework.boot.kafka.autoconfigure.KafkaAutoConfiguration; import org.springframework.boot.testcontainers.service.connection.ServiceConnection; import org.springframework.boot.testsupport.container.TestImage; import org.springframework.context.annotation.Bean; diff --git a/spring-boot-project/spring-boot-testcontainers/src/dockerTest/java/org/springframework/boot/testcontainers/service/connection/kafka/ConfluentKafkaContainerConnectionDetailsFactoryIntegrationTests.java b/spring-boot-project/spring-boot-testcontainers/src/dockerTest/java/org/springframework/boot/testcontainers/service/connection/kafka/ConfluentKafkaContainerConnectionDetailsFactoryIntegrationTests.java index 50db3de4f3..637c9f3ac0 100644 --- a/spring-boot-project/spring-boot-testcontainers/src/dockerTest/java/org/springframework/boot/testcontainers/service/connection/kafka/ConfluentKafkaContainerConnectionDetailsFactoryIntegrationTests.java +++ b/spring-boot-project/spring-boot-testcontainers/src/dockerTest/java/org/springframework/boot/testcontainers/service/connection/kafka/ConfluentKafkaContainerConnectionDetailsFactoryIntegrationTests.java @@ -28,7 +28,7 @@ import org.testcontainers.kafka.ConfluentKafkaContainer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; -import org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration; +import org.springframework.boot.kafka.autoconfigure.KafkaAutoConfiguration; import org.springframework.boot.testcontainers.service.connection.ServiceConnection; import org.springframework.boot.testsupport.container.TestImage; import org.springframework.context.annotation.Bean; diff --git a/spring-boot-project/spring-boot-testcontainers/src/dockerTest/java/org/springframework/boot/testcontainers/service/connection/kafka/DeprecatedConfluentKafkaContainerConnectionDetailsFactoryIntegrationTests.java b/spring-boot-project/spring-boot-testcontainers/src/dockerTest/java/org/springframework/boot/testcontainers/service/connection/kafka/DeprecatedConfluentKafkaContainerConnectionDetailsFactoryIntegrationTests.java index b28c0c870c..ff16b456c3 100644 --- a/spring-boot-project/spring-boot-testcontainers/src/dockerTest/java/org/springframework/boot/testcontainers/service/connection/kafka/DeprecatedConfluentKafkaContainerConnectionDetailsFactoryIntegrationTests.java +++ b/spring-boot-project/spring-boot-testcontainers/src/dockerTest/java/org/springframework/boot/testcontainers/service/connection/kafka/DeprecatedConfluentKafkaContainerConnectionDetailsFactoryIntegrationTests.java @@ -28,7 +28,7 @@ import org.testcontainers.junit.jupiter.Testcontainers; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; -import org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration; +import org.springframework.boot.kafka.autoconfigure.KafkaAutoConfiguration; import org.springframework.boot.testcontainers.service.connection.ServiceConnection; import org.springframework.boot.testsupport.container.TestImage; import org.springframework.context.annotation.Bean; diff --git a/spring-boot-project/spring-boot-testcontainers/src/dockerTest/java/org/springframework/boot/testcontainers/service/connection/redpanda/RedpandaContainerConnectionDetailsFactoryIntegrationTests.java b/spring-boot-project/spring-boot-testcontainers/src/dockerTest/java/org/springframework/boot/testcontainers/service/connection/redpanda/RedpandaContainerConnectionDetailsFactoryIntegrationTests.java index 1c26bc0295..b3361abf5f 100644 --- a/spring-boot-project/spring-boot-testcontainers/src/dockerTest/java/org/springframework/boot/testcontainers/service/connection/redpanda/RedpandaContainerConnectionDetailsFactoryIntegrationTests.java +++ b/spring-boot-project/spring-boot-testcontainers/src/dockerTest/java/org/springframework/boot/testcontainers/service/connection/redpanda/RedpandaContainerConnectionDetailsFactoryIntegrationTests.java @@ -28,7 +28,7 @@ import org.testcontainers.redpanda.RedpandaContainer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; -import org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration; +import org.springframework.boot.kafka.autoconfigure.KafkaAutoConfiguration; import org.springframework.boot.testcontainers.service.connection.ServiceConnection; import org.springframework.boot.testsupport.container.TestImage; import org.springframework.context.annotation.Bean; diff --git a/spring-boot-project/spring-boot-testcontainers/src/main/java/org/springframework/boot/testcontainers/service/connection/kafka/ApacheKafkaContainerConnectionDetailsFactory.java b/spring-boot-project/spring-boot-testcontainers/src/main/java/org/springframework/boot/testcontainers/service/connection/kafka/ApacheKafkaContainerConnectionDetailsFactory.java index 64deae99cd..c307cc7a58 100644 --- a/spring-boot-project/spring-boot-testcontainers/src/main/java/org/springframework/boot/testcontainers/service/connection/kafka/ApacheKafkaContainerConnectionDetailsFactory.java +++ b/spring-boot-project/spring-boot-testcontainers/src/main/java/org/springframework/boot/testcontainers/service/connection/kafka/ApacheKafkaContainerConnectionDetailsFactory.java @@ -20,7 +20,7 @@ import java.util.List; import org.testcontainers.kafka.KafkaContainer; -import org.springframework.boot.autoconfigure.kafka.KafkaConnectionDetails; +import org.springframework.boot.kafka.autoconfigure.KafkaConnectionDetails; import org.springframework.boot.ssl.SslBundle; import org.springframework.boot.testcontainers.service.connection.ContainerConnectionDetailsFactory; import org.springframework.boot.testcontainers.service.connection.ContainerConnectionSource; diff --git a/spring-boot-project/spring-boot-testcontainers/src/main/java/org/springframework/boot/testcontainers/service/connection/kafka/ConfluentKafkaContainerConnectionDetailsFactory.java b/spring-boot-project/spring-boot-testcontainers/src/main/java/org/springframework/boot/testcontainers/service/connection/kafka/ConfluentKafkaContainerConnectionDetailsFactory.java index a102b3cf50..d721f67fc4 100644 --- a/spring-boot-project/spring-boot-testcontainers/src/main/java/org/springframework/boot/testcontainers/service/connection/kafka/ConfluentKafkaContainerConnectionDetailsFactory.java +++ b/spring-boot-project/spring-boot-testcontainers/src/main/java/org/springframework/boot/testcontainers/service/connection/kafka/ConfluentKafkaContainerConnectionDetailsFactory.java @@ -20,7 +20,7 @@ import java.util.List; import org.testcontainers.kafka.ConfluentKafkaContainer; -import org.springframework.boot.autoconfigure.kafka.KafkaConnectionDetails; +import org.springframework.boot.kafka.autoconfigure.KafkaConnectionDetails; import org.springframework.boot.ssl.SslBundle; import org.springframework.boot.testcontainers.service.connection.ContainerConnectionDetailsFactory; import org.springframework.boot.testcontainers.service.connection.ContainerConnectionSource; diff --git a/spring-boot-project/spring-boot-testcontainers/src/main/java/org/springframework/boot/testcontainers/service/connection/kafka/DeprecatedConfluentKafkaContainerConnectionDetailsFactory.java b/spring-boot-project/spring-boot-testcontainers/src/main/java/org/springframework/boot/testcontainers/service/connection/kafka/DeprecatedConfluentKafkaContainerConnectionDetailsFactory.java index 3a31c52276..28605a9bbc 100644 --- a/spring-boot-project/spring-boot-testcontainers/src/main/java/org/springframework/boot/testcontainers/service/connection/kafka/DeprecatedConfluentKafkaContainerConnectionDetailsFactory.java +++ b/spring-boot-project/spring-boot-testcontainers/src/main/java/org/springframework/boot/testcontainers/service/connection/kafka/DeprecatedConfluentKafkaContainerConnectionDetailsFactory.java @@ -20,7 +20,7 @@ import java.util.List; import org.testcontainers.containers.KafkaContainer; -import org.springframework.boot.autoconfigure.kafka.KafkaConnectionDetails; +import org.springframework.boot.kafka.autoconfigure.KafkaConnectionDetails; import org.springframework.boot.ssl.SslBundle; import org.springframework.boot.testcontainers.service.connection.ContainerConnectionDetailsFactory; import org.springframework.boot.testcontainers.service.connection.ContainerConnectionSource; diff --git a/spring-boot-project/spring-boot-testcontainers/src/main/java/org/springframework/boot/testcontainers/service/connection/redpanda/RedpandaContainerConnectionDetailsFactory.java b/spring-boot-project/spring-boot-testcontainers/src/main/java/org/springframework/boot/testcontainers/service/connection/redpanda/RedpandaContainerConnectionDetailsFactory.java index 86693d18f0..1f637058bf 100644 --- a/spring-boot-project/spring-boot-testcontainers/src/main/java/org/springframework/boot/testcontainers/service/connection/redpanda/RedpandaContainerConnectionDetailsFactory.java +++ b/spring-boot-project/spring-boot-testcontainers/src/main/java/org/springframework/boot/testcontainers/service/connection/redpanda/RedpandaContainerConnectionDetailsFactory.java @@ -20,7 +20,7 @@ import java.util.List; import org.testcontainers.redpanda.RedpandaContainer; -import org.springframework.boot.autoconfigure.kafka.KafkaConnectionDetails; +import org.springframework.boot.kafka.autoconfigure.KafkaConnectionDetails; import org.springframework.boot.ssl.SslBundle; import org.springframework.boot.testcontainers.service.connection.ContainerConnectionDetailsFactory; import org.springframework.boot.testcontainers.service.connection.ContainerConnectionSource; diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-kafka/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-kafka/build.gradle index 661d403d21..fe429208e4 100644 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-kafka/build.gradle +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-kafka/build.gradle @@ -24,7 +24,7 @@ dependencies { dockerTestImplementation("org.testcontainers:kafka") implementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-json")) - implementation("org.springframework.kafka:spring-kafka") + implementation(project(":spring-boot-project:spring-boot-kafka")) testImplementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-test")) testImplementation("org.awaitility:awaitility")