From 98084aab2b9b206e1e5912e56f90f18e9bedc6b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Nicoll?= Date: Sat, 30 May 2026 14:27:22 +0200 Subject: [PATCH 1/8] Reformat additional-spring-configuration-metadata.json files --- .../META-INF/additional-spring-configuration-metadata.json | 2 +- .../META-INF/additional-spring-configuration-metadata.json | 2 +- .../META-INF/additional-spring-configuration-metadata.json | 2 +- .../META-INF/additional-spring-configuration-metadata.json | 2 +- .../META-INF/additional-spring-configuration-metadata.json | 2 +- .../META-INF/additional-spring-configuration-metadata.json | 2 +- .../META-INF/additional-spring-configuration-metadata.json | 4 ++-- .../META-INF/additional-spring-configuration-metadata.json | 2 +- .../spring/additional-spring-configuration-metadata.json | 2 +- .../META-INF/additional-spring-configuration-metadata.json | 4 ++-- .../META-INF/additional-spring-configuration-metadata.json | 2 +- .../META-INF/additional-spring-configuration-metadata.json | 2 +- .../META-INF/additional-spring-configuration-metadata.json | 3 +-- .../META-INF/additional-spring-configuration-metadata.json | 4 ++-- .../META-INF/additional-spring-configuration-metadata.json | 2 +- .../META-INF/additional-spring-configuration-metadata.json | 2 +- .../META-INF/additional-spring-configuration-metadata.json | 2 +- .../META-INF/additional-spring-configuration-metadata.json | 4 ++-- .../META-INF/additional-spring-configuration-metadata.json | 2 +- .../META-INF/additional-spring-configuration-metadata.json | 2 +- .../META-INF/additional-spring-configuration-metadata.json | 2 +- .../META-INF/additional-spring-configuration-metadata.json | 3 +-- .../META-INF/additional-spring-configuration-metadata.json | 4 ++-- 23 files changed, 28 insertions(+), 30 deletions(-) diff --git a/core/spring-boot-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/core/spring-boot-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 34a5b9630c2a..ab30cb37da02 100644 --- a/core/spring-boot-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/core/spring-boot-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -54,7 +54,7 @@ "messages" ] }, - { + { "name": "spring.resources.add-mappings", "type": "java.lang.Boolean", "deprecation": { diff --git a/core/spring-boot/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/core/spring-boot/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 3afaffa0cddc..593946777e29 100644 --- a/core/spring-boot/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/core/spring-boot/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -768,7 +768,7 @@ } ] }, - { + { "name": "logging.structured.json.stacktrace.printer", "values": [ { diff --git a/module/spring-boot-activemq/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/module/spring-boot-activemq/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 1c8816b7b03b..19a7ad28c0dd 100644 --- a/module/spring-boot-activemq/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/module/spring-boot-activemq/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -95,4 +95,4 @@ "defaultValue": true } ] -} \ No newline at end of file +} diff --git a/module/spring-boot-amqp/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/module/spring-boot-amqp/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 297ef6d0ad9d..d085fc76440c 100644 --- a/module/spring-boot-amqp/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/module/spring-boot-amqp/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -66,4 +66,4 @@ } } ] -} \ No newline at end of file +} diff --git a/module/spring-boot-batch-jdbc/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/module/spring-boot-batch-jdbc/src/main/resources/META-INF/additional-spring-configuration-metadata.json index bdefe168c9bf..0a45ef57f5a7 100644 --- a/module/spring-boot-batch-jdbc/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/module/spring-boot-batch-jdbc/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -38,4 +38,4 @@ } } ] -} \ No newline at end of file +} diff --git a/module/spring-boot-batch/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/module/spring-boot-batch/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 2a4b792750f6..9684695664ec 100644 --- a/module/spring-boot-batch/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/module/spring-boot-batch/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -7,4 +7,4 @@ "defaultValue": true } ] -} \ No newline at end of file +} diff --git a/module/spring-boot-data-mongodb/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/module/spring-boot-data-mongodb/src/main/resources/META-INF/additional-spring-configuration-metadata.json index d1da21a87a5e..fda36d09bb5a 100644 --- a/module/spring-boot-data-mongodb/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/module/spring-boot-data-mongodb/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -1,6 +1,6 @@ { "properties": [ - { + { "name": "management.health.mongo.enabled", "deprecation": { "level": "error", @@ -43,4 +43,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/module/spring-boot-elasticsearch/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/module/spring-boot-elasticsearch/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 7f3b2b8e5506..4610ab4ac020 100644 --- a/module/spring-boot-elasticsearch/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/module/spring-boot-elasticsearch/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -114,4 +114,4 @@ } } ] -} \ No newline at end of file +} diff --git a/module/spring-boot-flyway/src/main/resources/META-INF/spring/additional-spring-configuration-metadata.json b/module/spring-boot-flyway/src/main/resources/META-INF/spring/additional-spring-configuration-metadata.json index 4236408dd9db..d045219bf1e1 100644 --- a/module/spring-boot-flyway/src/main/resources/META-INF/spring/additional-spring-configuration-metadata.json +++ b/module/spring-boot-flyway/src/main/resources/META-INF/spring/additional-spring-configuration-metadata.json @@ -210,4 +210,4 @@ } } ] -} \ No newline at end of file +} diff --git a/module/spring-boot-graphql/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/module/spring-boot-graphql/src/main/resources/META-INF/additional-spring-configuration-metadata.json index c6eb50c94980..eb4e76ae2263 100644 --- a/module/spring-boot-graphql/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/module/spring-boot-graphql/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -66,8 +66,8 @@ } ], "hints": [ - { - "name": "spring.graphql.cors.allowed-headers", + { + "name": "spring.graphql.cors.allowed-headers", "values": [ { "value": "*" diff --git a/module/spring-boot-http-codec/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/module/spring-boot-http-codec/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 61e148b885c1..8952f411dfe2 100644 --- a/module/spring-boot-http-codec/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/module/spring-boot-http-codec/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -1,4 +1,4 @@ -{ +{ "properties": [ { "name": "spring.http.codecs.preferred-json-mapper", diff --git a/module/spring-boot-jdbc/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/module/spring-boot-jdbc/src/main/resources/META-INF/additional-spring-configuration-metadata.json index b15bc1f28f83..7693e1632c69 100644 --- a/module/spring-boot-jdbc/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/module/spring-boot-jdbc/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -191,4 +191,4 @@ } ] } -} \ No newline at end of file +} diff --git a/module/spring-boot-jpa/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/module/spring-boot-jpa/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 1b02295bb7fa..4b4d99de777d 100644 --- a/module/spring-boot-jpa/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/module/spring-boot-jpa/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -6,6 +6,5 @@ "defaultValue": true } ], - "hints": [ - ] + "hints": [] } diff --git a/module/spring-boot-kafka/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/module/spring-boot-kafka/src/main/resources/META-INF/additional-spring-configuration-metadata.json index e44376c96047..ff0c0f3be803 100644 --- a/module/spring-boot-kafka/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/module/spring-boot-kafka/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -1,6 +1,6 @@ { "properties": [ - { + { "name": "spring.kafka.admin.ssl.keystore-location", "type": "org.springframework.core.io.Resource", "description": "Location of the key store file.", @@ -303,4 +303,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/module/spring-boot-ldap/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/module/spring-boot-ldap/src/main/resources/META-INF/additional-spring-configuration-metadata.json index eb1fc2a1db05..8cb17a7e57b3 100644 --- a/module/spring-boot-ldap/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/module/spring-boot-ldap/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -7,4 +7,4 @@ "defaultValue": true } ] -} \ No newline at end of file +} diff --git a/module/spring-boot-liquibase/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/module/spring-boot-liquibase/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 38c94a35f096..bc0ba126fbb1 100644 --- a/module/spring-boot-liquibase/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/module/spring-boot-liquibase/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -45,4 +45,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/module/spring-boot-mail/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/module/spring-boot-mail/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 1a0de547c5e9..a7e22911136f 100644 --- a/module/spring-boot-mail/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/module/spring-boot-mail/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -15,4 +15,4 @@ "defaultValue": false } ] -} \ No newline at end of file +} diff --git a/module/spring-boot-micrometer-metrics/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/module/spring-boot-micrometer-metrics/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 7a3842e3ede9..3211a0894c58 100644 --- a/module/spring-boot-micrometer-metrics/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/module/spring-boot-micrometer-metrics/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -62,7 +62,7 @@ "since": "2.1.0" } }, - { + { "name": "management.metrics.export.appoptics.api-token", "type": "java.lang.String", "deprecation": { @@ -1756,7 +1756,7 @@ "since": "3.0.0" } }, - { + { "name": "management.metrics.web.server.auto-time-requests", "type": "java.lang.Boolean", "deprecation": { diff --git a/module/spring-boot-reactor/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/module/spring-boot-reactor/src/main/resources/META-INF/additional-spring-configuration-metadata.json index df4eb43eefbb..54714105d0e9 100644 --- a/module/spring-boot-reactor/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/module/spring-boot-reactor/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -1,7 +1,7 @@ { "groups": [], "properties": [ - { + { "name": "spring.reactor.stacktrace-mode.enabled", "description": "Whether Reactor should collect stacktrace information at runtime.", "defaultValue": false, diff --git a/module/spring-boot-security-oauth2-resource-server/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/module/spring-boot-security-oauth2-resource-server/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 8fcd3398be66..774d7801fc49 100644 --- a/module/spring-boot-security-oauth2-resource-server/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/module/spring-boot-security-oauth2-resource-server/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -1,7 +1,7 @@ { "groups": [], "properties": [ - { + { "name": "spring.security.oauth2.resourceserver.jwt.jws-algorithm", "type": "java.lang.String", "deprecation": { diff --git a/module/spring-boot-security/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/module/spring-boot-security/src/main/resources/META-INF/additional-spring-configuration-metadata.json index e12f6d393538..83ee5ce1acc6 100644 --- a/module/spring-boot-security/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/module/spring-boot-security/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -1,7 +1,7 @@ { "groups": [], "properties": [ - { + { "name": "spring.security.filter.dispatcher-types", "defaultValue": [ "async", diff --git a/module/spring-boot-thymeleaf/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/module/spring-boot-thymeleaf/src/main/resources/META-INF/additional-spring-configuration-metadata.json index b27cf3c42e86..9b957dabcaf8 100644 --- a/module/spring-boot-thymeleaf/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/module/spring-boot-thymeleaf/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -39,7 +39,6 @@ ], "hints": [], "ignored": { - "properties": [ - ] + "properties": [] } } diff --git a/module/spring-boot-web-server/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/module/spring-boot-web-server/src/main/resources/META-INF/additional-spring-configuration-metadata.json index dcb8c46cfd13..4dc1e5db2100 100644 --- a/module/spring-boot-web-server/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/module/spring-boot-web-server/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -72,7 +72,7 @@ { "name": "server.error.whitelabel.enabled", "description": "Whether to enable the default error page displayed in browsers in case of a server error.", - "defaultValue": true , + "defaultValue": true, "deprecation": { "level": "error", "replacement": "spring.web.error.whitelabel.enabled", @@ -260,4 +260,4 @@ } } ] -} \ No newline at end of file +} From 23829221effef86e09346d0635353bd8ba285cb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Nicoll?= Date: Sat, 30 May 2026 14:27:53 +0200 Subject: [PATCH 2/8] Remove sourceType from deprecated properties with error level See gh-50375 --- .../META-INF/additional-spring-configuration-metadata.json | 2 -- .../META-INF/additional-spring-configuration-metadata.json | 6 ------ 2 files changed, 8 deletions(-) diff --git a/module/spring-boot-jackson/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/module/spring-boot-jackson/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 8a69f6c8815f..2b2e0b5f0ae0 100644 --- a/module/spring-boot-jackson/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/module/spring-boot-jackson/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -37,7 +37,6 @@ "name": "spring.jackson.read", "type": "java.util.Map", "description": "Jackson on/off token reader features that are specific to JSON.", - "sourceType": "org.springframework.boot.jackson.autoconfigure.JacksonProperties", "deprecation": { "level": "error", "replacement": "spring.jackson.json.read", @@ -48,7 +47,6 @@ "name": "spring.jackson.write", "type": "java.util.Map", "description": "Jackson on/off token writer features that are specific to JSON.", - "sourceType": "org.springframework.boot.jackson.autoconfigure.JacksonProperties", "deprecation": { "level": "error", "replacement": "spring.jackson.json.write", diff --git a/module/spring-boot-opentelemetry/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/module/spring-boot-opentelemetry/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 4566a76af666..cf378fb275e9 100644 --- a/module/spring-boot-opentelemetry/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/module/spring-boot-opentelemetry/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -11,7 +11,6 @@ "name": "management.otlp.logging.compression", "type": "org.springframework.boot.opentelemetry.actuate.autoconfigure.logging.OpenTelemetryLoggingExportProperties$Compression", "description": "Method used to compress the payload.", - "sourceType": "org.springframework.boot.opentelemetry.actuate.autoconfigure.logging.OpenTelemetryLoggingExportProperties", "defaultValue": "none", "deprecation": { "level": "error", @@ -23,7 +22,6 @@ "name": "management.otlp.logging.connect-timeout", "type": "java.time.Duration", "description": "Connect timeout for the OTel collector connection.", - "sourceType": "org.springframework.boot.opentelemetry.actuate.autoconfigure.logging.OpenTelemetryLoggingExportProperties", "defaultValue": "10s", "deprecation": { "level": "error", @@ -35,7 +33,6 @@ "name": "management.otlp.logging.endpoint", "type": "java.lang.String", "description": "URL to the OTel collector's HTTP API.", - "sourceType": "org.springframework.boot.opentelemetry.actuate.autoconfigure.logging.OpenTelemetryLoggingExportProperties", "deprecation": { "level": "error", "replacement": "management.opentelemetry.logging.export.otlp.endpoint", @@ -54,7 +51,6 @@ "name": "management.otlp.logging.headers", "type": "java.util.Map", "description": "Custom HTTP headers you want to pass to the collector, for example auth headers.", - "sourceType": "org.springframework.boot.opentelemetry.actuate.autoconfigure.logging.OpenTelemetryLoggingExportProperties", "deprecation": { "level": "error", "replacement": "management.opentelemetry.logging.export.otlp.headers", @@ -65,7 +61,6 @@ "name": "management.otlp.logging.timeout", "type": "java.time.Duration", "description": "Call timeout for the OTel Collector to process an exported batch of data. This timeout spans the entire call: resolving DNS, connecting, writing the request body, server processing, and reading the response body. If the call requires redirects or retries all must complete within one timeout period.", - "sourceType": "org.springframework.boot.opentelemetry.actuate.autoconfigure.logging.OpenTelemetryLoggingExportProperties", "defaultValue": "10s", "deprecation": { "level": "error", @@ -77,7 +72,6 @@ "name": "management.otlp.logging.transport", "type": "org.springframework.boot.opentelemetry.actuate.autoconfigure.logging.Transport", "description": "Transport used to send the logs.", - "sourceType": "org.springframework.boot.opentelemetry.actuate.autoconfigure.logging.OpenTelemetryLoggingExportProperties", "defaultValue": "http", "deprecation": { "level": "error", From ed6c375d19906672d0101d290234ea348f1862d3 Mon Sep 17 00:00:00 2001 From: Kimgyuilli Date: Mon, 4 May 2026 19:01:24 +0900 Subject: [PATCH 3/8] Fix stale type references in configuration metadata See gh-50375 Signed-off-by: Kimgyuilli --- .../META-INF/additional-spring-configuration-metadata.json | 2 +- .../META-INF/additional-spring-configuration-metadata.json | 2 +- .../META-INF/additional-spring-configuration-metadata.json | 2 +- .../META-INF/additional-spring-configuration-metadata.json | 2 +- .../META-INF/additional-spring-configuration-metadata.json | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/module/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/module/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json index b539371484c4..25f10ce2939b 100644 --- a/module/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/module/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -201,7 +201,7 @@ }, { "name": "management.wavefront.api-token-type", - "type": "org.springframework.boot.actuate.autoconfigure.wavefront.WavefrontProperties$TokenType", + "type": "java.lang.String", "deprecation": { "level": "error", "reason": "Wavefront is end-of-life.", diff --git a/module/spring-boot-jdbc/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/module/spring-boot-jdbc/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 7693e1632c69..6a16a6effc39 100644 --- a/module/spring-boot-jdbc/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/module/spring-boot-jdbc/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -44,7 +44,7 @@ }, { "name": "spring.datasource.initialization-mode", - "type": "org.springframework.boot.jdbc.DataSourceInitializationMode", + "type": "org.springframework.boot.sql.init.DatabaseInitializationMode", "deprecation": { "level": "error", "replacement": "spring.sql.init.mode", diff --git a/module/spring-boot-mail/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/module/spring-boot-mail/src/main/resources/META-INF/additional-spring-configuration-metadata.json index a7e22911136f..fffe84880b7d 100644 --- a/module/spring-boot-mail/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/module/spring-boot-mail/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -10,7 +10,7 @@ { "name": "spring.mail.test-connection", "description": "Whether to test that the mail server is available on startup.", - "sourceType": "org.springframework.boot.autoconfigure.mail.MailProperties", + "sourceType": "org.springframework.boot.mail.autoconfigure.MailSenderValidatorAutoConfiguration", "type": "java.lang.Boolean", "defaultValue": false } diff --git a/module/spring-boot-micrometer-metrics/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/module/spring-boot-micrometer-metrics/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 3211a0894c58..b33b36aab411 100644 --- a/module/spring-boot-micrometer-metrics/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/module/spring-boot-micrometer-metrics/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -1393,7 +1393,7 @@ }, { "name": "management.metrics.export.prometheus.pushgateway.shutdown-operation", - "type": "org.springframework.boot.actuate.metrics.export.prometheus.PrometheusPushGatewayManager$ShutdownOperation", + "type": "org.springframework.boot.micrometer.metrics.export.prometheus.PrometheusPushGatewayManager$ShutdownOperation", "deprecation": { "level": "error", "replacement": "management.prometheus.metrics.export.pushgateway.shutdown-operation", diff --git a/module/spring-boot-opentelemetry/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/module/spring-boot-opentelemetry/src/main/resources/META-INF/additional-spring-configuration-metadata.json index cf378fb275e9..c2ddfff2b773 100644 --- a/module/spring-boot-opentelemetry/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/module/spring-boot-opentelemetry/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -9,7 +9,7 @@ }, { "name": "management.otlp.logging.compression", - "type": "org.springframework.boot.opentelemetry.actuate.autoconfigure.logging.OpenTelemetryLoggingExportProperties$Compression", + "type": "org.springframework.boot.opentelemetry.autoconfigure.logging.otlp.OtlpLoggingProperties$Compression", "description": "Method used to compress the payload.", "defaultValue": "none", "deprecation": { @@ -70,7 +70,7 @@ }, { "name": "management.otlp.logging.transport", - "type": "org.springframework.boot.opentelemetry.actuate.autoconfigure.logging.Transport", + "type": "org.springframework.boot.opentelemetry.autoconfigure.logging.otlp.Transport", "description": "Transport used to send the logs.", "defaultValue": "http", "deprecation": { From 7c23813752edc943243dff51382d11b95f335cda Mon Sep 17 00:00:00 2001 From: Dmytro Nosan Date: Thu, 28 May 2026 15:55:38 +0200 Subject: [PATCH 4/8] Restore Spring Security integration with HtmlUnitDriver Prior to this commit, securityDelegateMockMvcHtmlUnitDriverCustomizer did not have an @Bean annotation and therefore was not registered as a bean in SecurityMockMvcAutoConfiguration. See gh-50602 Signed-off-by: Dmytro Nosan --- .../SecurityMockMvcAutoConfiguration.java | 1 + ...SecurityMockMvcAutoConfigurationTests.java | 111 ++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 module/spring-boot-security-test/src/test/java/org/springframework/boot/security/test/autoconfigure/webmvc/SecurityMockMvcAutoConfigurationTests.java diff --git a/module/spring-boot-security-test/src/main/java/org/springframework/boot/security/test/autoconfigure/webmvc/SecurityMockMvcAutoConfiguration.java b/module/spring-boot-security-test/src/main/java/org/springframework/boot/security/test/autoconfigure/webmvc/SecurityMockMvcAutoConfiguration.java index 32c9b6b13876..e6766d4d05fc 100644 --- a/module/spring-boot-security-test/src/main/java/org/springframework/boot/security/test/autoconfigure/webmvc/SecurityMockMvcAutoConfiguration.java +++ b/module/spring-boot-security-test/src/main/java/org/springframework/boot/security/test/autoconfigure/webmvc/SecurityMockMvcAutoConfiguration.java @@ -60,6 +60,7 @@ SecurityMockMvcBuilderCustomizer securityMockMvcBuilderCustomizer() { @ConditionalOnClass(HtmlUnitDriver.class) static class SecurityMockMvcHtmlUnitDriverConfiguration { + @Bean MockMvcHtmlUnitDriverCustomizer securityDelegateMockMvcHtmlUnitDriverCustomizer() { return (driver) -> driver .setExecutor(new DelegatingSecurityContextExecutor(Executors.newSingleThreadExecutor())); diff --git a/module/spring-boot-security-test/src/test/java/org/springframework/boot/security/test/autoconfigure/webmvc/SecurityMockMvcAutoConfigurationTests.java b/module/spring-boot-security-test/src/test/java/org/springframework/boot/security/test/autoconfigure/webmvc/SecurityMockMvcAutoConfigurationTests.java new file mode 100644 index 000000000000..9989d9d6c5e5 --- /dev/null +++ b/module/spring-boot-security-test/src/test/java/org/springframework/boot/security/test/autoconfigure/webmvc/SecurityMockMvcAutoConfigurationTests.java @@ -0,0 +1,111 @@ +/* + * Copyright 2012-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.security.test.autoconfigure.webmvc; + +import java.util.concurrent.Executor; +import java.util.function.Function; + +import jakarta.servlet.Filter; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; +import org.openqa.selenium.htmlunit.HtmlUnitDriver; + +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.security.test.autoconfigure.webmvc.SecurityMockMvcAutoConfiguration.SecurityMockMvcBuilderCustomizer; +import org.springframework.boot.test.context.FilteredClassLoader; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.boot.webmvc.test.autoconfigure.MockMvcHtmlUnitDriverCustomizer; +import org.springframework.security.concurrent.DelegatingSecurityContextExecutor; +import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors; +import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.request.RequestPostProcessor; +import org.springframework.test.web.servlet.setup.ConfigurableMockMvcBuilder; +import org.springframework.test.web.servlet.setup.MockMvcConfigurer; +import org.springframework.web.context.WebApplicationContext; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.then; +import static org.mockito.Mockito.mock; + +/** + * Tests for {@link SecurityMockMvcAutoConfiguration}. + * + * @author Dmytro Nosan + */ +class SecurityMockMvcAutoConfigurationTests { + + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(SecurityMockMvcAutoConfiguration.class)); + + @Test + void securityMockMvcBuilderCustomizerIsNotRegisteredWhenMockMvcIsNotOnTheClasspath() { + this.contextRunner.withClassLoader(new FilteredClassLoader(MockMvc.class)) + .with(securityFilterChain()) + .run((context) -> assertThat(context).doesNotHaveBean(MockMvcHtmlUnitDriverCustomizer.class) + .doesNotHaveBean(SecurityMockMvcBuilderCustomizer.class)); + } + + @Test + void securityMockMvcBuilderCustomizerIsNotRegisteredWhenSecurityFilterChainIsMissing() { + this.contextRunner + .run((context) -> assertThat(context).doesNotHaveBean(SecurityMockMvcBuilderCustomizer.class)); + } + + @Test + void htmlUnitDriverCustomizerIsNotRegisteredWhenHtmlUnitIsNotOnTheClasspath() { + this.contextRunner.withClassLoader(new FilteredClassLoader(HtmlUnitDriver.class)) + .run((context) -> assertThat(context).doesNotHaveBean(MockMvcHtmlUnitDriverCustomizer.class)); + } + + @Test + void registersSecurityMockMvcBuilderCustomizerWhenSecurityFilterChainIsPresent() { + this.contextRunner.with(securityFilterChain()) + .run((context) -> assertThat(context).hasSingleBean(SecurityMockMvcBuilderCustomizer.class) + .getBean(SecurityMockMvcBuilderCustomizer.class) + .satisfies((customizer) -> { + ConfigurableMockMvcBuilder builder = mock(ConfigurableMockMvcBuilder.class); + customizer.customize(builder); + ArgumentCaptor configurerCaptor = ArgumentCaptor + .forClass(MockMvcConfigurer.class); + then(builder).should().apply(configurerCaptor.capture()); + RequestPostProcessor postProcessor = configurerCaptor.getValue() + .beforeMockMvcCreated(builder, mock(WebApplicationContext.class)); + assertThat(postProcessor) + .hasSameClassAs(SecurityMockMvcRequestPostProcessors.testSecurityContext()); + })); + } + + @Test + void registersSecurityMockMvcHtmlUnitDriverCustomizerWhenHtmlUnitIsPresent() { + this.contextRunner.run((context) -> assertThat(context).hasSingleBean(MockMvcHtmlUnitDriverCustomizer.class) + .getBean(MockMvcHtmlUnitDriverCustomizer.class) + .satisfies((customizer) -> { + HtmlUnitDriver htmlUnitDriver = mock(HtmlUnitDriver.class); + customizer.customize(htmlUnitDriver); + ArgumentCaptor executorCaptor = ArgumentCaptor.forClass(Executor.class); + then(htmlUnitDriver).should().setExecutor(executorCaptor.capture()); + assertThat(executorCaptor.getValue()).isInstanceOf(DelegatingSecurityContextExecutor.class); + })); + } + + private Function securityFilterChain() { + return (contextRunner) -> contextRunner.withBean(AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME, + Filter.class, () -> mock(Filter.class)); + } + +} From 39ed20b474205faacf89d550f91efaab33e7d65e Mon Sep 17 00:00:00 2001 From: Lee JiWon Date: Fri, 29 May 2026 21:49:28 +0900 Subject: [PATCH 5/8] Treat empty SSL bundle as unset Update the Cassandra, Redis, and MongoDB SSL configuration so that an empty `bundle` property is treated as unset rather than enabling SSL. See gh-50624 Signed-off-by: Lee JiWon --- .../boot/autoconfigure/cassandra/CassandraProperties.java | 3 ++- .../boot/autoconfigure/data/redis/RedisProperties.java | 3 ++- .../boot/autoconfigure/mongo/MongoProperties.java | 3 ++- .../autoconfigure/cassandra/CassandraPropertiesTests.java | 7 +++++++ .../autoconfigure/data/redis/RedisPropertiesTests.java | 7 +++++++ .../boot/autoconfigure/mongo/MongoPropertiesTests.java | 7 +++++++ 6 files changed, 27 insertions(+), 3 deletions(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/cassandra/CassandraProperties.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/cassandra/CassandraProperties.java index f461d6d63dbf..8a2af94065cc 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/cassandra/CassandraProperties.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/cassandra/CassandraProperties.java @@ -23,6 +23,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.core.io.Resource; +import org.springframework.util.StringUtils; /** * Configuration properties for Cassandra. @@ -236,7 +237,7 @@ public static class Ssl { private String bundle; public boolean isEnabled() { - return (this.enabled != null) ? this.enabled : this.bundle != null; + return (this.enabled != null) ? this.enabled : StringUtils.hasText(this.bundle); } public void setEnabled(boolean enabled) { diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/RedisProperties.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/RedisProperties.java index f9738ea940e9..8533b8e520b9 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/RedisProperties.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/RedisProperties.java @@ -20,6 +20,7 @@ import java.util.List; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.util.StringUtils; /** * Configuration properties for Redis. @@ -425,7 +426,7 @@ public static class Ssl { private String bundle; public boolean isEnabled() { - return (this.enabled != null) ? this.enabled : this.bundle != null; + return (this.enabled != null) ? this.enabled : StringUtils.hasText(this.bundle); } public void setEnabled(boolean enabled) { diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/MongoProperties.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/MongoProperties.java index d5e6455f9b7e..756d79f418b6 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/MongoProperties.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/MongoProperties.java @@ -22,6 +22,7 @@ import org.bson.UuidRepresentation; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.util.StringUtils; /** * Configuration properties for Mongo. @@ -289,7 +290,7 @@ public static class Ssl { private String bundle; public boolean isEnabled() { - return (this.enabled != null) ? this.enabled : this.bundle != null; + return (this.enabled != null) ? this.enabled : StringUtils.hasText(this.bundle); } public void setEnabled(boolean enabled) { diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/cassandra/CassandraPropertiesTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/cassandra/CassandraPropertiesTests.java index 05f583d17682..c8af870bd65d 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/cassandra/CassandraPropertiesTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/cassandra/CassandraPropertiesTests.java @@ -58,4 +58,11 @@ void defaultValuesInManualMetadataAreConsistent() { assertThat(driverDefaults.get(TypedDriverOption.HEARTBEAT_TIMEOUT)).isEqualTo(Duration.ofSeconds(5)); } + @Test + void sslIsNotEnabledWhenBundleIsEmpty() { + CassandraProperties properties = new CassandraProperties(); + properties.getSsl().setBundle(""); + assertThat(properties.getSsl().isEnabled()).isFalse(); + } + } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/redis/RedisPropertiesTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/redis/RedisPropertiesTests.java index 9fe49f174eec..17e0164ebf76 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/redis/RedisPropertiesTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/redis/RedisPropertiesTests.java @@ -39,4 +39,11 @@ void lettuceDefaultsAreConsistent() { .isEqualTo(defaultClusterTopologyRefreshOptions.useDynamicRefreshSources()); } + @Test + void sslIsNotEnabledWhenBundleIsEmpty() { + RedisProperties properties = new RedisProperties(); + properties.getSsl().setBundle(""); + assertThat(properties.getSsl().isEnabled()).isFalse(); + } + } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/MongoPropertiesTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/MongoPropertiesTests.java index 3a9cf251cf38..ba24ebd1a9e3 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/MongoPropertiesTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/MongoPropertiesTests.java @@ -37,6 +37,13 @@ void defaultUuidRepresentationIsAlignedWithSpringData() { assertThat(springBootDefault).isEqualTo(springDataDefault); } + @Test + void sslIsNotEnabledWhenBundleIsEmpty() { + MongoProperties properties = new MongoProperties(); + properties.getSsl().setBundle(""); + assertThat(properties.getSsl().isEnabled()).isFalse(); + } + private UuidRepresentation springDataDefaultUuidRepresentation() { return new MongoConfigurationSupport() { From 88a7a44bafca87fe17e5381b146b2dc90a190a50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Nicoll?= Date: Sat, 30 May 2026 16:11:36 +0200 Subject: [PATCH 6/8] Polish "Treat empty SSL bundle as unset" Update Mail SSL configuration as well. See gh-50624 --- .../mail/MailSenderPropertiesConfiguration.java | 2 +- .../mail/MailSenderAutoConfigurationTests.java | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mail/MailSenderPropertiesConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mail/MailSenderPropertiesConfiguration.java index e872fe8332e6..8b91aaeb6d08 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mail/MailSenderPropertiesConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mail/MailSenderPropertiesConfiguration.java @@ -69,7 +69,7 @@ private void applyProperties(MailProperties properties, JavaMailSenderImpl sende if (ssl.isEnabled()) { javaMailProperties.setProperty("mail." + protocol + ".ssl.enable", "true"); } - if (ssl.getBundle() != null) { + if (StringUtils.hasLength(ssl.getBundle())) { SslBundle sslBundle = sslBundles.getBundle(ssl.getBundle()); javaMailProperties.put("mail." + protocol + ".ssl.socketFactory", sslBundle.createSslContext().getSocketFactory()); diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mail/MailSenderAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mail/MailSenderAutoConfigurationTests.java index b2ae3f3647b6..04975e8f230f 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mail/MailSenderAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mail/MailSenderAutoConfigurationTests.java @@ -245,6 +245,21 @@ void connectionOnStartupNotCalled() { }); } + @Test + @WithPackageResources("test.jks") + void sslIsNotEnabledWhenBundleIsEmpty() { + this.contextRunner + .withPropertyValues("spring.mail.host:localhost", "spring.mail.ssl.bundle: ", + "spring.ssl.bundle.jks.test-bundle.keystore.location:classpath:test.jks", + "spring.ssl.bundle.jks.test-bundle.keystore.password:secret", + "spring.ssl.bundle.jks.test-bundle.key.password:password") + .run((context) -> { + assertThat(context).hasSingleBean(JavaMailSenderImpl.class); + JavaMailSenderImpl mailSender = context.getBean(JavaMailSenderImpl.class); + assertThat(mailSender.getJavaMailProperties().get("mail.smtp.ssl.socketFactory")).isNull(); + }); + } + @Test void smtpSslEnabled() { this.contextRunner.withPropertyValues("spring.mail.host:localhost", "spring.mail.ssl.enabled:true") From 6d9fd88ae9b0e228c42640b40db7bb894476a84e Mon Sep 17 00:00:00 2001 From: Sebastien Tardif Date: Fri, 29 May 2026 14:37:09 -0700 Subject: [PATCH 7/8] Close URLClassLoader in ArchitectureCheck See gh-50626 Signed-off-by: Sebastien Tardif --- .../build/architecture/ArchitectureCheck.java | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/buildSrc/src/main/java/org/springframework/boot/build/architecture/ArchitectureCheck.java b/buildSrc/src/main/java/org/springframework/boot/build/architecture/ArchitectureCheck.java index 50100af51d92..c6ce471c0b4c 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/architecture/ArchitectureCheck.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/architecture/ArchitectureCheck.java @@ -132,17 +132,18 @@ private Stream evaluate(JavaClasses javaClasses) { private void withCompileClasspath(Callable callable) throws Exception { ClassLoader previous = Thread.currentThread().getContextClassLoader(); - try { - List urls = new ArrayList<>(); - for (File file : getCompileClasspath().getFiles()) { - urls.add(file.toURI().toURL()); - } - ClassLoader classLoader = new URLClassLoader(urls.toArray(new URL[0]), getClass().getClassLoader()); - Thread.currentThread().setContextClassLoader(classLoader); - callable.call(); + List urls = new ArrayList<>(); + for (File file : getCompileClasspath().getFiles()) { + urls.add(file.toURI().toURL()); } - finally { - Thread.currentThread().setContextClassLoader(previous); + try (URLClassLoader classLoader = new URLClassLoader(urls.toArray(new URL[0]), getClass().getClassLoader())) { + Thread.currentThread().setContextClassLoader(classLoader); + try { + callable.call(); + } + finally { + Thread.currentThread().setContextClassLoader(previous); + } } } From 9fd93be2e44720f42452ba142db3dca596430141 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Nicoll?= Date: Sat, 30 May 2026 16:48:25 +0200 Subject: [PATCH 8/8] Remove gRPC 3rd party starter reference Closes gh-50506 --- starter/README.adoc | 3 --- 1 file changed, 3 deletions(-) diff --git a/starter/README.adoc b/starter/README.adoc index 48b98cc4e376..06059b8909c2 100644 --- a/starter/README.adoc +++ b/starter/README.adoc @@ -119,9 +119,6 @@ do as they were designed before this was clarified. | https://javaee.github.io/grizzly/[Grizzly] | https://github.com/dabla/grizzly-spring-boot-starter -| https://www.grpc.io/[gRPC] -| https://github.com/LogNet/grpc-spring-boot-starter & https://github.com/yidongnan/grpc-spring-boot-starter & https://github.com/DanielLiu1123/grpc-starter - | https://ha-jdbc.github.io/[HA JDBC] | https://github.com/lievendoclo/hajdbc-spring-boot