Skip to content

Commit ed5ec22

Browse files
committed
Merge branch '3.4.x'
Closes gh-44417
2 parents 48e3de0 + f235d7e commit ed5ec22

File tree

13 files changed

+20
-19
lines changed

13 files changed

+20
-19
lines changed

buildSrc/src/main/resources/org/springframework/boot/build/antora/antora-asciidoc-attributes.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ url-gradle-dsl=https://docs.gradle.org/current/dsl
2727
url-gradle-javadoc=https://docs.gradle.org/current/javadoc
2828
url-kotlin-docs-kotlin-plugin={url-kotlin-docs}/using-gradle.html
2929
url-micrometer-docs-concepts={url-micrometer-docs}/concepts
30-
url-micrometer-docs-observation={url-micrometer-docs}/observation
3130
url-micrometer-docs-implementations={url-micrometer-docs}/implementations
31+
url-micrometer-docs-observation={url-micrometer-docs}/observation
3232
url-native-build-tools-docs=https://graalvm.github.io/native-build-tools/{version-native-build-tools}
3333
url-native-build-tools-docs-gradle-plugin={url-native-build-tools-docs}/gradle-plugin.html
3434
url-native-build-tools-docs-maven-plugin={url-native-build-tools-docs}/maven-plugin.html

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/observation/web/servlet/ObservationFilterConfigurations.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
import org.springframework.beans.factory.ObjectProvider;
2424
import org.springframework.boot.actuate.autoconfigure.observation.ObservationProperties;
2525
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
26+
import org.springframework.boot.autoconfigure.condition.ConditionalOnBooleanProperty;
2627
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
27-
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
2828
import org.springframework.boot.autoconfigure.web.servlet.ConditionalOnMissingFilterBean;
2929
import org.springframework.boot.web.servlet.FilterRegistrationBean;
3030
import org.springframework.context.annotation.Bean;
@@ -54,7 +54,7 @@ static <T extends ServerHttpObservationFilter> FilterRegistrationBean<T> filterR
5454
static class TracingHeaderObservation {
5555

5656
@Bean
57-
@ConditionalOnProperty(prefix = "management.observations.http.server.requests", name = "write-trace-header")
57+
@ConditionalOnBooleanProperty("management.observations.http.server.requests.write-trace-header")
5858
@ConditionalOnBean(Tracer.class)
5959
@ConditionalOnMissingFilterBean({ ServerHttpObservationFilter.class, TraceHeaderObservationFilter.class })
6060
FilterRegistrationBean<TraceHeaderObservationFilter> webMvcObservationFilter(ObservationRegistry registry,

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/observation/web/servlet/TraceHeaderObservationFilter.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public class TraceHeaderObservationFilter extends ServerHttpObservationFilter {
4848
*/
4949
public TraceHeaderObservationFilter(Tracer tracer, ObservationRegistry observationRegistry) {
5050
super(observationRegistry);
51-
Assert.notNull(tracer, "Tracer must not be null");
51+
Assert.notNull(tracer, "'tracer' must not be null");
5252
this.tracer = tracer;
5353
}
5454

@@ -62,7 +62,7 @@ public TraceHeaderObservationFilter(Tracer tracer, ObservationRegistry observati
6262
public TraceHeaderObservationFilter(Tracer tracer, ObservationRegistry observationRegistry,
6363
ServerRequestObservationConvention observationConvention) {
6464
super(observationRegistry, observationConvention);
65-
Assert.notNull(tracer, "Tracer must not be null");
65+
Assert.notNull(tracer, "'tracer' must not be null");
6666
this.tracer = tracer;
6767
}
6868

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/observation/web/servlet/TraceHeaderObservationFilterTests.java

+2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030

3131
/**
3232
* Tests for {@link TraceHeaderObservationFilter}.
33+
*
34+
* @author Brian Clozel
3335
*/
3436
class TraceHeaderObservationFilterTests {
3537

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/observation/web/servlet/WebMvcObservationAutoConfigurationTests.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ void filterRegistrationBacksOffWithAnotherTraceHeaderObservationFilterRegistrati
165165
}
166166

167167
@Test
168-
void filterRegistrationBacksOffWithAnothertestTraceHeaderObservationFilter() {
168+
void filterRegistrationBacksOffWithAnotherTraceHeaderObservationFilter() {
169169
this.contextRunner.withConfiguration(AutoConfigurations.of(NoopTracerAutoConfiguration.class))
170170
.withPropertyValues("management.observations.http.server.requests.write-trace-header=true")
171171
.withUserConfiguration(TestTraceHeaderObservationFilterConfiguration.class)

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/freemarker/FreeMarkerServletWebConfiguration.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ FreeMarkerViewResolver freeMarkerViewResolver() {
7777

7878
@Bean
7979
@ConditionalOnEnabledResourceChain
80-
@ConditionalOnMissingFilterBean(ResourceUrlEncodingFilter.class)
80+
@ConditionalOnMissingFilterBean
8181
FilterRegistrationBean<ResourceUrlEncodingFilter> resourceUrlEncodingFilter() {
8282
FilterRegistrationBean<ResourceUrlEncodingFilter> registration = new FilterRegistrationBean<>(
8383
new ResourceUrlEncodingFilter());

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jersey/JerseyAutoConfiguration.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public JerseyAutoConfiguration(JerseyProperties jersey, ResourceConfig config,
9898
}
9999

100100
@Bean
101-
@ConditionalOnMissingFilterBean(RequestContextFilter.class)
101+
@ConditionalOnMissingFilterBean
102102
public FilterRegistrationBean<RequestContextFilter> requestContextFilter() {
103103
FilterRegistrationBean<RequestContextFilter> registration = new FilterRegistrationBean<>();
104104
registration.setFilter(new RequestContextFilter());

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/thymeleaf/ThymeleafAutoConfiguration.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ static class ThymeleafWebMvcConfiguration {
134134

135135
@Bean
136136
@ConditionalOnEnabledResourceChain
137-
@ConditionalOnMissingFilterBean(ResourceUrlEncodingFilter.class)
137+
@ConditionalOnMissingFilterBean
138138
FilterRegistrationBean<ResourceUrlEncodingFilter> resourceUrlEncodingFilter() {
139139
FilterRegistrationBean<ResourceUrlEncodingFilter> registration = new FilterRegistrationBean<>(
140140
new ResourceUrlEncodingFilter());

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ private void customizeResourceHandlerRegistration(ResourceHandlerRegistration re
371371

372372
@Bean
373373
@ConditionalOnMissingBean({ RequestContextListener.class, RequestContextFilter.class })
374-
@ConditionalOnMissingFilterBean(RequestContextFilter.class)
374+
@ConditionalOnMissingFilterBean
375375
public static RequestContextFilter requestContextFilter() {
376376
return new OrderedRequestContextFilter();
377377
}

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/servlet/ConditionalOnMissingFilterBeanTests.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2023 the original author or authors.
2+
* Copyright 2012-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -46,7 +46,6 @@ class ConditionalOnMissingFilterBeanTests {
4646

4747
@Test
4848
void outcomeWhenValueIsOfMissingBeanReturnsMatch() {
49-
5049
this.contextRunner.withUserConfiguration(WithoutTestFilterConfig.class, OnMissingWithValueConfig.class)
5150
.run((context) -> assertThat(context).satisfies(filterBeanRequirement("myOtherFilter", "testFilter")));
5251
}

spring-boot-project/spring-boot-docs/src/docs/antora/modules/ROOT/pages/redirect.adoc

+2-2
Original file line numberDiff line numberDiff line change
@@ -1190,8 +1190,6 @@
11901190
* xref:reference:actuator/metrics.adoc#actuator.metrics.supported.system[#actuator.metrics.supported.system]
11911191
* xref:reference:actuator/metrics.adoc#actuator.metrics.supported.system[#production-ready-metrics-system]
11921192
* xref:reference:actuator/metrics.adoc#actuator.metrics.supported.tasks[#actuator.metrics.supported.tasks]
1193-
* xref:reference:actuator/observability.adoc#actuator.observability.annotations[#actuator.metrics.supported.timed-annotation]
1194-
* xref:reference:actuator/observability.adoc#actuator.observability.annotations[#production-ready-metrics-timed-annotation]
11951193
* xref:reference:actuator/metrics.adoc#actuator.metrics.supported.tomcat[#actuator.metrics.supported.tomcat]
11961194
* xref:reference:actuator/metrics.adoc#actuator.metrics.supported.tomcat[#production-ready-metrics-tomcat]
11971195
* xref:reference:actuator/metrics.adoc#actuator.metrics.supported[#actuator.metrics.supported]
@@ -1210,7 +1208,9 @@
12101208
* xref:reference:actuator/monitoring.adoc#actuator.monitoring.management-specific-ssl[#production-ready-management-specific-ssl]
12111209
* xref:reference:actuator/monitoring.adoc#actuator.monitoring[#actuator.monitoring]
12121210
* xref:reference:actuator/monitoring.adoc#actuator.monitoring[#production-ready-monitoring]
1211+
* xref:reference:actuator/observability.adoc#actuator.observability.annotations[#actuator.metrics.supported.timed-annotation]
12131212
* xref:reference:actuator/observability.adoc#actuator.observability.annotations[#actuator.observability.annotations]
1213+
* xref:reference:actuator/observability.adoc#actuator.observability.annotations[#production-ready-metrics-timed-annotation]
12141214
* xref:reference:actuator/observability.adoc#actuator.observability.common-tags[#actuator.observability.common-tags]
12151215
* xref:reference:actuator/observability.adoc#actuator.observability.opentelemetry[#actuator.observability.opentelemetry]
12161216
* xref:reference:actuator/observability.adoc#actuator.observability.preventing-observations[#actuator.observability.preventing-observations]

spring-boot-project/spring-boot-docs/src/docs/antora/modules/reference/pages/actuator/metrics.adoc

+2-2
Original file line numberDiff line numberDiff line change
@@ -775,8 +775,8 @@ See the {url-spring-framework-docs}/integration/observability.html#observability
775775
To add to the default tags, provide a javadoc:org.springframework.context.annotation.Bean[format=annotation] that extends javadoc:org.springframework.http.server.observation.DefaultServerRequestObservationConvention[] from the `org.springframework.http.server.observation` package.
776776
To replace the default tags, provide a javadoc:org.springframework.context.annotation.Bean[format=annotation] that implements javadoc:org.springframework.http.server.observation.ServerRequestObservationConvention[].
777777

778-
If the application is using xref:actuator/tracing.adoc#actuator.micrometer-tracing[Tracing], you can configure the HTTP server observations to print an `X-Trace-Id`
779-
HTTP response header containing the current trace Id. For that, you will need to enable the following configuration property: configprop:management.observations.http.server.requests.write-trace-header[].
778+
If the application is using xref:actuator/tracing.adoc#actuator.micrometer-tracing[tracing], you can configure the HTTP server observations to include an `X-Trace-Id`
779+
HTTP response header containing the current trace ID. For that, you will need to enable the following configuration property: configprop:management.observations.http.server.requests.write-trace-header[].
780780

781781
TIP: In some cases, exceptions handled in web controllers are not recorded as request metrics tags.
782782
Applications can opt in and record exceptions by xref:web/servlet.adoc#web.servlet.spring-mvc.error-handling[setting handled exceptions as request attributes].

spring-boot-project/spring-boot-docs/src/docs/antora/modules/reference/pages/actuator/observability.adoc

+3-3
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,9 @@ The next sections will provide more details about logging, metrics and traces.
108108
[[actuator.observability.annotations]]
109109
== Micrometer Observation Annotations support
110110

111-
To enable scanning of observability annotations like javadoc:io.micrometer.observation.annotation.Observed[format=annotation], javadoc:io.micrometer.core.annotation.Timed[format=annotation], javadoc:io.micrometer.core.annotation.Counted[format=annotation], javadoc:io.micrometer.core.aop.MeterTag[format=annotation] and javadoc:io.micrometer.tracing.annotation.NewSpan[format=annotation] annotations, you need to set the configprop:management.observations.annotations.enabled[] property to `true`.
111+
To enable scanning of observability annotations like javadoc:io.micrometer.observation.annotation.Observed[format=annotation], javadoc:io.micrometer.core.annotation.Timed[format=annotation], javadoc:io.micrometer.core.annotation.Counted[format=annotation], javadoc:io.micrometer.core.aop.MeterTag[format=annotation] and javadoc:io.micrometer.tracing.annotation.NewSpan[format=annotation], you need to set the configprop:management.observations.annotations.enabled[] property to `true`.
112112
This feature is supported by Micrometer directly.
113113
Please refer to the {url-micrometer-docs-concepts}/timers.html#_the_timed_annotation[Micrometer], {url-micrometer-docs-observation}/components.html#micrometer-observation-annotations[Micrometer Observation] and {url-micrometer-tracing-docs}/api.html#_aspect_oriented_programming[Micrometer Tracing] reference docs.
114114

115-
NOTE: When you annotate methods or classes which are already instrumented (for example xref:reference:actuator/metrics.adoc#actuator.metrics.supported.spring-data-repository[Spring Data repositories] or xref:reference:actuator/metrics.adoc#actuator.metrics.supported.spring-mvc[Spring MVC controllers]), you will get duplicate observations.
116-
In that case you can either disable the automatic instrumentation using xref:reference:actuator/observability.adoc#actuator.observability.preventing-observations[properties] or an javadoc:io.micrometer.observation.ObservationPredicate[] and rely on your annotations, or you can remove your annotation.
115+
NOTE: When you annotate methods or classes which are already instrumented (for example, xref:reference:actuator/metrics.adoc#actuator.metrics.supported.spring-data-repository[Spring Data repositories] or xref:reference:actuator/metrics.adoc#actuator.metrics.supported.spring-mvc[Spring MVC controllers]), you will get duplicate observations.
116+
In that case you can either disable the automatic instrumentation using xref:reference:actuator/observability.adoc#actuator.observability.preventing-observations[properties] or an javadoc:io.micrometer.observation.ObservationPredicate[] and rely on your annotations, or you can remove your annotations.

0 commit comments

Comments
 (0)