diff --git a/build.gradle b/build.gradle index 8e5bc8953b..ca85e6f488 100644 --- a/build.gradle +++ b/build.gradle @@ -19,9 +19,10 @@ plugins { id 'base' id 'project-report' id 'idea' - id 'org.ajoberstar.grgit' version '4.1.1' + id 'org.ajoberstar.grgit' version '5.2.1' id 'io.spring.nohttp' version '0.0.11' id 'io.spring.dependency-management' version '1.1.4' apply false + id 'com.github.spotbugs' version '6.0.6' } apply plugin: 'io.spring.nohttp' @@ -52,7 +53,6 @@ ext { assertjVersion = '3.24.2' awaitilityVersion = '4.2.0' - googleJsr305Version = '3.0.2' hamcrestVersion = '2.2' hibernateValidationVersion = '8.0.1.Final' jacksonBomVersion = '2.15.3' @@ -60,15 +60,15 @@ ext { junit4Version = '4.13.2' junitJupiterVersion = '5.10.1' kafkaVersion = '3.6.1' - log4jVersion = '2.21.1' + log4jVersion = '2.22.1' micrometerDocsVersion = '1.0.2' - micrometerVersion = '1.12.2' - micrometerTracingVersion = '1.2.2' - mockitoVersion = '5.6.0' + micrometerVersion = '1.13.0-SNAPSHOT' + micrometerTracingVersion = '1.3.0-SNAPSHOT' + mockitoVersion = '5.8.0' reactorVersion = '2023.0.2' scalaVersion = '2.13' springBootVersion = '3.2.1' // docs module - springDataVersion = '2023.1.2' + springDataVersion = '2023.2.0-SNAPSHOT' springRetryVersion = '2.0.5' springVersion = '6.1.3' zookeeperVersion = '3.8.3' @@ -152,7 +152,10 @@ configure(javaProjects) { subproject -> // dependencies that are common across all java projects dependencies { - implementation "com.google.code.findbugs:jsr305:$googleJsr305Version" + def spotbugsAnnotations = "com.github.spotbugs:spotbugs-annotations:${spotbugs.toolVersion.get()}" + compileOnly spotbugsAnnotations + testCompileOnly spotbugsAnnotations + testImplementation 'org.junit.jupiter:junit-jupiter-api' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' diff --git a/examples.desktop b/examples.desktop deleted file mode 100644 index a9818df984..0000000000 --- a/examples.desktop +++ /dev/null @@ -1,240 +0,0 @@ -[Desktop Entry] -Version=1.0 -Type=Link -Name=Examples -Name[aa]=Ceelallo -Name[ace]=Contoh -Name[af]=Voorbeelde -Name[am]=ምሳሌዎች -Name[an]=Exemplos -Name[ar]=أمثلة -Name[ast]=Exemplos -Name[az]=Nümunələr -Name[be]=Прыклады -Name[bg]=Примери -Name[bn]=উদাহরণ -Name[br]=Skouerioù -Name[bs]=Primjeri -Name[ca]=Exemples -Name[ca@valencia]=Exemples -Name[ckb]=نمونه‌كان -Name[cs]=Ukázky -Name[csb]=Przëmiôrë -Name[cy]=Enghreifftiau -Name[da]=Eksempler -Name[de]=Beispiele -Name[dv]=މިސާލުތަށް -Name[el]=Παραδείγματα -Name[en_AU]=Examples -Name[en_CA]=Examples -Name[en_GB]=Examples -Name[eo]=Ekzemploj -Name[es]=Ejemplos -Name[et]=Näidised -Name[eu]=Adibideak -Name[fa]=نمونه‌ها -Name[fi]=Esimerkkejä -Name[fil]=Mga halimbawa -Name[fo]=Dømir -Name[fr]=Exemples -Name[fur]=Esemplis -Name[fy]=Foarbylden -Name[ga]=Samplaí -Name[gd]=Buill-eisimpleir -Name[gl]=Exemplos -Name[gu]=દૃષ્ટાન્તો -Name[gv]=Sampleyryn -Name[he]=דוגמאות -Name[hi]=उदाहरण -Name[hr]=Primjeri -Name[ht]=Egzanp -Name[hu]=Minták -Name[hy]=Օրինակներ -Name[id]=Contoh -Name[is]=Sýnishorn -Name[it]=Esempi -Name[ja]=サンプル -Name[ka]=ნიმუშები -Name[kk]=Мысалдар -Name[kl]=Assersuutit -Name[km]=ឧទាហរណ៍ -Name[kn]=ಉದಾಹರಣೆಗಳು -Name[ko]=예시 -Name[ku]=Mînak -Name[kw]=Ensamplow -Name[ky]=Мисалдар -Name[lb]=Beispiller -Name[lt]=Pavyzdžių failai -Name[lv]=Paraugi -Name[mg]=Ohatra -Name[mhr]=Пример-влак -Name[mi]=Tauira -Name[mk]=Примери -Name[ml]=ഉദാഹരണങ്ങള്‍ -Name[mr]=उदाहरणे -Name[ms]=Contoh-contoh -Name[my]=ဥပမာများ -Name[nb]=Eksempler -Name[nds]=Bispelen -Name[ne]=उदाहरणहरू -Name[nl]=Voorbeeld-bestanden -Name[nn]=Døme -Name[nso]=Mehlala -Name[oc]=Exemples -Name[pa]=ਉਦਾਹਰਨਾਂ -Name[pl]=Przykłady -Name[pt]=Exemplos -Name[pt_BR]=Exemplos -Name[ro]=Exemple -Name[ru]=Примеры -Name[sc]=Esempiusu -Name[sco]=Examples -Name[sd]=مثالون -Name[se]=Ovdamearkkat -Name[shn]=တူဝ်ယၢင်ႇ -Name[si]=නිදසුන් -Name[sk]=Príklady -Name[sl]=Zgledi -Name[sml]=Saga Saupama -Name[sn]=Miyenzaniso -Name[sq]=Shembujt -Name[sr]=Примери -Name[sv]=Exempel -Name[sw]=Mifano -Name[szl]=Bajszpile -Name[ta]=உதாரணங்கள் -Name[ta_LK]=உதாரணங்கள் -Name[te]=ఉదాహరణలు -Name[tg]=Намунаҳо -Name[th]=ตัวอย่าง -Name[tr]=Örnekler -Name[tt]=Мисаллар -Name[ug]=مىساللار -Name[uk]=Приклади -Name[ur]=مثالیں -Name[uz]=Намуналар -Name[vec]=Esempi -Name[vi]=Mẫu ví dụ -Name[wae]=Bischbil -Name[zh_CN]=示例 -Name[zh_HK]=範例 -Name[zh_TW]=範例 -Comment=Example content for Ubuntu -Comment[aa]=Ubuntuh addattinoh ceelallo -Comment[ace]=Contoh aso ke Ubuntu -Comment[af]=Voorbeeld inhoud vir Ubuntu -Comment[am]=ዝርዝር ምሳሌዎች ለ ኡቡንቱ -Comment[an]=Conteniu d'exemplo ta Ubuntu -Comment[ar]=أمثلة محتوى لأوبونتو -Comment[ast]=Conteníu del exemplu pa Ubuntu -Comment[az]=Ubuntu üçün nümunə material -Comment[be]=Узоры дакументаў для Ubuntu -Comment[bg]=Примерно съдържание за Ubuntu -Comment[bn]=উবুন্টু সংক্রান্ত নমুনা তথ্য -Comment[br]=Skouerenn endalc'had evit Ubuntu -Comment[bs]=Primjer sadrzaja za Ubuntu -Comment[ca]=Continguts d'exemple per a l'Ubuntu -Comment[ca@valencia]=Continguts d'exemple per a l'Ubuntu -Comment[ckb]=نموونەی ناوەڕۆکێک بۆ ئوبوونتو -Comment[cs]=Ukázkový obsah pro Ubuntu -Comment[csb]=Przëmiôrowô zamkłosc dlô Ubuntu -Comment[cy]=Cynnwys enghraifft ar gyfer Ubuntu -Comment[da]=Eksempel indhold til Ubuntu -Comment[de]=Beispielinhalt für Ubuntu -Comment[dv]=އުބުންޓު އާއި އެކަށޭނަ މިސާލުތައް -Comment[el]=Παραδείγματα περιεχομένου για το Ubuntu -Comment[en_AU]=Example content for Ubuntu -Comment[en_CA]=Example content for Ubuntu -Comment[en_GB]=Example content for Ubuntu -Comment[eo]=Ekzempla enhavo por Ubuntu -Comment[es]=Contenido de ejemplo para Ubuntu -Comment[et]=Ubuntu näidisfailid -Comment[eu]=Adibidezko edukia Ubunturako -Comment[fa]=محتویات نمونه برای اوبونتو -Comment[fi]=Esimerkkisisältöjä Ubuntulle -Comment[fil]=Halimbawang laman para sa Ubuntu -Comment[fo]=Dømis innihald fyri Ubuntu -Comment[fr]=Contenu d'exemple pour Ubuntu -Comment[fur]=Contignûts di esempli par Ubuntu -Comment[fy]=Foarbyld fan ynhâld foar Ubuntu -Comment[ga]=Inneachar samplach do Ubuntu -Comment[gd]=Eisimpleir de shusbaint airson Ubuntu -Comment[gl]=Contido do exemplo para Ubuntu -Comment[gu]=Ubuntu માટે ઉદાહરણ સૂચી -Comment[gv]=Stoo Sanpleyr son Ubuntu -Comment[he]=תוכן לדוגמה עבור אובונטו -Comment[hi]=उबुन्टू हेतु उदाहरण सारांश -Comment[hr]=Primjeri sadržaja za Ubuntu -Comment[ht]=Kontni egzanplè pou Ubuntu -Comment[hu]=Mintatartalom Ubuntuhoz -Comment[hy]=Բովանդակության օրինակները Ubuntu֊ի համար -Comment[id]=Contoh isi bagi Ubuntu -Comment[is]=Sýnishorn fyrir Ubuntu -Comment[it]=Contenuti di esempio per Ubuntu -Comment[ja]=Ubuntuのサンプルコンテンツ -Comment[ka]=უბუნტუს სანიმუშო შიგთავსი -Comment[kk]=Ubuntu құжаттар мысалдары -Comment[kl]=Ubuntu-mut imarisaanut assersuut -Comment[km]=ឧទាហរណ៍សម្រាប់អាប់ប៊ុនធូ -Comment[kn]=ಉಬುಂಟುಗೆ ಉದಾಹರಣೆಗಳು -Comment[ko]=우분투 컨텐츠 예시 -Comment[ku]=Ji bo Ubuntu mînaka naverokê -Comment[ky]=Ubuntu-нун мисал документтери -Comment[lb]=Beispillinhalt fir Ubuntu -Comment[lt]=Įvairių dokumentų, paveikslėlių, garsų bei vaizdų pavyzdžiai -Comment[lv]=Parauga saturs Ubuntu videi -Comment[mg]=Ohatra ho an'i Ubuntu -Comment[mhr]=Ubuntu-лан документ-влакын пример-влак -Comment[mi]=Mata tauira o Ubuntu -Comment[mk]=Пример содржина за Убунту -Comment[ml]=ഉബുണ്ടുവിനു വേണ്ടിയുള്ള ഉദാഹരണങ്ങള്‍ -Comment[mr]=उबंटूसाठी घटकांची उदाहरणे -Comment[ms]=Kandungan contoh untuk Ubuntu -Comment[my]=Ubuntu အတွက် နမူနာ မာတိကာ -Comment[nb]=Eksempelinnhold for Ubuntu -Comment[ne]=उबन्टुका लागि उदाहरण सामग्री -Comment[nl]=Voorbeeldinhoud voor Ubuntu -Comment[nn]=Eksempelinnhald for Ubuntu -Comment[nso]=Mohlala wa dikagare tša Ubuntu -Comment[oc]=Exemples de contengut per Ubuntu -Comment[pa]=ਉਬਤੂੰ ਲਈ ਨਮੂਨਾ ਸਮੱਗਰੀ -Comment[pl]=Przykładowa zawartość dla Ubuntu -Comment[pt]=Conteúdo de exemplo para o Ubuntu -Comment[pt_BR]=Exemplo de conteúdo para Ubuntu -Comment[ro]=Conținut exemplu pentru Ubuntu -Comment[ru]=Примеры документов для Ubuntu -Comment[sc]=Esempiu de cabidu pro Ubuntu -Comment[sco]=Example content fur Ubuntu -Comment[sd]=اوبنٽو لاءِ مثال طور ڏنل مواد -Comment[shn]=တူဝ်ႇယၢင်ႇလမ်းၼႂ်း တႃႇ Ubuntu -Comment[si]=උබුන්ටු සඳහා උදාහරණ අන්තර්ගතයන් -Comment[sk]=Ukážkový obsah pre Ubuntu -Comment[sl]=Ponazoritvena vsebina za Ubuntu -Comment[sml]=Saupama Isina Ubuntu -Comment[sn]=Muyenzaniso wehuiswa kuitira Ubuntu -Comment[sq]=Shembull i përmbajtjes për Ubuntu -Comment[sr]=Садржај примера за Убунту -Comment[sv]=Exempelinnehåll för Ubuntu -Comment[sw]=Bidhaa mfano ya Ubuntu -Comment[szl]=Bajszpilnŏ treść dlŏ Ubuntu -Comment[ta]=உபுண்டுவிற்கான எடுத்துகாட்டு உள்ளடக்கங்கள் -Comment[ta_LK]=உபுண்டுவிற்கான எடுத்துகாட்டு உள்ளடக்கங்கள் -Comment[te]=Ubuntu వాడుక విధాన నమూనాలు -Comment[tg]=Мӯҳтавои намунавӣ барои Ubuntu -Comment[th]=ตัวอย่างข้อมูลสำหรับ Ubuntu -Comment[tr]=Ubuntu için örnek içerik -Comment[tt]=Ubuntu өчен документ мисаллары -Comment[ug]=ئۇبۇنتۇنىڭ مىساللىرى -Comment[uk]=Приклади контенту для Ubuntu -Comment[ur]=یوبنٹو کیلئے مثالی مواد -Comment[uz]=Ubuntu учун намуна таркиби -Comment[vec]=Contenuti de esempio de Ubuntu -Comment[vi]=Mẫu ví dụ cho Ubuntu -Comment[wae]=D'Ubuntu bischbildatijä -Comment[zh_CN]=Ubuntu 示例内容 -Comment[zh_HK]=Ubuntu 的範例內容 -Comment[zh_TW]=Ubuntu 的範例內容 -URL=file:///usr/share/example-content/ -Icon=folder -X-Ubuntu-Gettext-Domain=example-content - diff --git a/gradle.properties b/gradle.properties index 47da5b1729..36f5543874 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -version=3.1.2-SNAPSHOT +version=3.2.0-SNAPSHOT org.gradle.jvmargs=-Xmx1536M -Dfile.encoding=UTF-8 org.gradle.caching=true org.gradle.parallel=true diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7f93135c49..d64cd49177 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 46671acb6e..db8c3baafe 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=3e1af3ae886920c3ac87f7a91f816c0c7c436f276a6eefdb3da152100fef72ae -distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +distributionSha256Sum=9d926787066a081739e8200858338b4a69e837c3a821a33aca9db09dd4a41026 +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/settings.gradle b/settings.gradle index 961fe423e2..90a0a27963 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,14 +1,6 @@ -pluginManagement { - repositories { - mavenCentral() - gradlePluginPortal() - maven { url 'https://repo.spring.io/release' } - } -} - plugins { - id 'com.gradle.enterprise' version '3.12.6' - id "io.spring.ge.conventions" version "0.0.14" + id 'com.gradle.enterprise' version '3.15.1' + id 'io.spring.ge.conventions' version '0.0.14' } rootProject.name = 'spring-kafka-dist' diff --git a/spring-kafka-docs/src/main/antora/antora-playbook.yml b/spring-kafka-docs/src/main/antora/antora-playbook.yml index f4ca62181a..62b3ee016a 100644 --- a/spring-kafka-docs/src/main/antora/antora-playbook.yml +++ b/spring-kafka-docs/src/main/antora/antora-playbook.yml @@ -41,4 +41,4 @@ runtime: format: pretty ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.3.5/ui-bundle.zip \ No newline at end of file + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.10/ui-bundle.zip \ No newline at end of file diff --git a/spring-kafka-docs/src/main/antora/modules/ROOT/pages/appendix/change-history.adoc b/spring-kafka-docs/src/main/antora/modules/ROOT/pages/appendix/change-history.adoc index d0092d4284..26aeb4ec86 100644 --- a/spring-kafka-docs/src/main/antora/modules/ROOT/pages/appendix/change-history.adoc +++ b/spring-kafka-docs/src/main/antora/modules/ROOT/pages/appendix/change-history.adoc @@ -1,7 +1,59 @@ [[history]] = Change History -[[migration]] +[[what-s-new-in-3-1-since-3-0]] +== What's New in 3.1 Since 3.0 +:page-section-summary-toc: 1 + +This section covers the changes made from version 3.0 to version 3.1. +For changes in earlier version, see xref:appendix/change-history.adoc[Change History]. + +[[x31-kafka-client]] +=== Kafka Client Version + +This version requires the 3.6.0 `kafka-clients`. + +[[x31-ekb]] +=== EmbeddedKafkaBroker + +An additional implementation is now provided to use `Kraft` instead of Zookeeper. +See xref:testing.adoc#ekb[Embedded Kafka Broker] for more information. + +[[x31-jd]] +=== JsonDeserializer + +When a deserialization exception occurs, the `SerializationException` message no longer contains the data with the form `Can't deserialize data [[123, 34, 98, 97, 122, ...`; an array of numerical values for each data byte is not useful and can be verbose for large data. +When used with an `ErrorHandlingDeserializer`, the `DeserializationException` sent to the error handler contains the `data` property which contains the raw data that could not be deserialized. +When not used with an `ErrorHandlingDeserializer`, the `KafkaConsumer` will continually emit exceptions for the same record showing the topic/partition/offset and the cause thrown by Jackson. + +[[x31-cpp]] +=== ContainerPostProcessor + +Post-processing can be applied on a listener container by specifying the bean name of a `ContainerPostProcessor` on the `@KafkaListener` annotation. +This occurs after the container has been created and after any configured `ContainerCustomizer` configured on the container factory. +See xref:kafka/container-factory.adoc[Container Factory] for more information. + +[[x31-ehd]] +=== ErrorHandlingDeserializer + +You can now add a `Validator` to this deserializer; if the delegate `Deserializer` successfully deserializes the object, but that object fails validation, an exception is thrown similar to a deserialization exception occurring. +This allows the original raw data to be passed to the error handler. +See xref:kafka/serdes.adoc#error-handling-deserializer[Using `ErrorHandlingDeserializer`] for more information. + +[[x31-retryable]] +=== Retryable Topics +Change suffix `-retry-5000` to `-retry` when `@RetryableTopic(backoff = @Backoff(delay = 5000), attempts = "2", fixedDelayTopicStrategy = FixedDelayStrategy.SINGLE_TOPIC)`. +If you want to keep suffix `-retry-5000`, use `@RetryableTopic(backoff = @Backoff(delay = 5000), attempts = "2")`. +See xref:retrytopic/topic-naming.adoc[Topic Naming] for more information. + +[[x31-c]] +=== Listener Container Changes + +When manually assigning partitions, with a `null` consumer `group.id`, the `AckMode` is now automatically coerced to `MANUAL`. +See xref:tips.adoc#tip-assign-all-parts[Manually Assigning All Partitions] for more information. + + +[[what-s-new-in-3-0-since-2-9]] == What's New in 3.0 Since 2.9 [[x30-kafka-client]] diff --git a/spring-kafka-docs/src/main/antora/modules/ROOT/pages/whats-new.adoc b/spring-kafka-docs/src/main/antora/modules/ROOT/pages/whats-new.adoc index a13581b5a0..75142f4fe0 100644 --- a/spring-kafka-docs/src/main/antora/modules/ROOT/pages/whats-new.adoc +++ b/spring-kafka-docs/src/main/antora/modules/ROOT/pages/whats-new.adoc @@ -1,52 +1,9 @@ = What's new? -[[what-s-new-in-3-1-since-3-0]] -== What's New in 3.1 Since 3.0 +[[what-s-new-in-3-2-since-3-1]] +== What's New in 3.2 Since 3.1 :page-section-summary-toc: 1 -This section covers the changes made from version 3.0 to version 3.1. +This section covers the changes made from version 3.1 to version 3.2. For changes in earlier version, see xref:appendix/change-history.adoc[Change History]. -[[x31-kafka-client]] -=== Kafka Client Version - -This version requires the 3.6.0 `kafka-clients`. - -[[x31-ekb]] -=== EmbeddedKafkaBroker - -An additional implementation is now provided to use `Kraft` instead of Zookeeper. -See xref:testing.adoc#ekb[Embedded Kafka Broker] for more information. - -[[x31-jd]] -=== JsonDeserializer - -When a deserialization exception occurs, the `SerializationException` message no longer contains the data with the form `Can't deserialize data [[123, 34, 98, 97, 122, ...`; an array of numerical values for each data byte is not useful and can be verbose for large data. -When used with an `ErrorHandlingDeserializer`, the `DeserializationException` sent to the error handler contains the `data` property which contains the raw data that could not be deserialized. -When not used with an `ErrorHandlingDeserializer`, the `KafkaConsumer` will continually emit exceptions for the same record showing the topic/partition/offset and the cause thrown by Jackson. - -[[x31-cpp]] -=== ContainerPostProcessor - -Post processing can be applied on a listener container by specifying the bean name of a `ContainerPostProcessor` on the `@KafkaListener` annotation. -This occurs after the container has been created and after any configured `ContainerCustomizer` configured on the container factory. -See xref:kafka/container-factory.adoc[Container Factory] for more information. - -[[x31-ehd]] -=== ErrorHandlingDeserializer - -You can now add a `Validator` to this deserializer; if the delegate `Deserializer` successfully deserializes the object, but that object fails validation, an exception is thrown similar to a deserialization exception occurring. -This allows the original raw data to be passed to the error handler. -See xref:kafka/serdes.adoc#error-handling-deserializer[Using `ErrorHandlingDeserializer`] for more information. - -[[x31-retryable]] -=== Retryable Topics -Change suffix `-retry-5000` to `-retry` when `@RetryableTopic(backoff = @Backoff(delay = 5000), attempts = "2", fixedDelayTopicStrategy = FixedDelayStrategy.SINGLE_TOPIC)`. -If you want to keep suffix `-retry-5000`, use `@RetryableTopic(backoff = @Backoff(delay = 5000), attempts = "2")`. -See xref:retrytopic/topic-naming.adoc[Topic Naming] for more information. - -[[x31-c]] -=== Listener Container Changes - -When manually assigning partitions, with a `null` consumer `group.id`, the `AckMode` is now automatically coerced to `MANUAL`. -See xref:tips.adoc#tip-assign-all-parts[Manually Assigning All Partitions] for more information.