Skip to content

Commit 871f82d

Browse files
committed
Polish "Auto-configure observation of Redis with Lettuce"
See gh-46975
1 parent 0187b77 commit 871f82d

File tree

8 files changed

+83
-179
lines changed

8 files changed

+83
-179
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1053,7 +1053,7 @@ Metrics for Jetty's javadoc:org.eclipse.jetty.server.Connector[] instances are b
10531053
[[actuator.metrics.supported.redis]]
10541054
=== Redis Metrics
10551055

1056-
Auto-configuration registers a javadoc:io.lettuce.core.metrics.MicrometerCommandLatencyRecorder[] for the auto-configured javadoc:org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory[].
1056+
Auto-configuration registers a javadoc:io.lettuce.core.tracing.MicrometerTracing[] for the auto-configured javadoc:org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory[].
10571057
For more detail, see the {url-lettuce-docs}/advanced-usage/#observability[Observability section] of the Lettuce documentation.
10581058

10591059

module/spring-boot-data-redis/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ dependencies {
5656

5757
testImplementation(project(":core:spring-boot-test"))
5858
testImplementation(project(":test-support:spring-boot-test-support"))
59+
testImplementation("io.micrometer:micrometer-observation-test")
5960
testImplementation("io.projectreactor:reactor-test")
6061

6162
testRuntimeOnly("ch.qos.logback:logback-classic")

module/spring-boot-data-redis/src/main/java/org/springframework/boot/data/redis/autoconfigure/metrics/LettuceMetricsAutoConfiguration.java

Lines changed: 0 additions & 56 deletions
This file was deleted.
Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,35 +14,36 @@
1414
* limitations under the License.
1515
*/
1616

17-
package org.springframework.boot.data.redis.autoconfigure;
17+
package org.springframework.boot.data.redis.autoconfigure.observation;
1818

1919
import io.lettuce.core.RedisClient;
2020
import io.lettuce.core.tracing.MicrometerTracing;
2121
import io.micrometer.observation.ObservationRegistry;
22-
import org.springframework.boot.actuate.autoconfigure.observation.ObservationAutoConfiguration;
22+
2323
import org.springframework.boot.autoconfigure.AutoConfiguration;
2424
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
2525
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
26-
import org.springframework.boot.autoconfigure.data.redis.ClientResourcesBuilderCustomizer;
27-
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
26+
import org.springframework.boot.data.redis.autoconfigure.ClientResourcesBuilderCustomizer;
27+
import org.springframework.boot.data.redis.autoconfigure.DataRedisAutoConfiguration;
2828
import org.springframework.context.annotation.Bean;
2929

3030
/**
31-
* Auto-configuration for Lettuce tracing.
31+
* Auto-configuration for Lettuce observability.
3232
*
33+
* @author Antonin Arquey
34+
* @author Yanming Zhou
3335
* @author Dũng Đăng Minh
3436
* @since 4.0.0
3537
*/
36-
@AutoConfiguration(
37-
before = RedisAutoConfiguration.class,
38-
after = ObservationAutoConfiguration.class
39-
)
40-
@ConditionalOnClass({RedisClient.class, MicrometerTracing.class, ObservationRegistry.class})
38+
@AutoConfiguration(before = DataRedisAutoConfiguration.class,
39+
afterName = "org.springframework.boot.micrometer.observation.autoconfigure.ObservationAutoConfiguration")
40+
@ConditionalOnClass({ RedisClient.class, MicrometerTracing.class, ObservationRegistry.class })
4141
@ConditionalOnBean(ObservationRegistry.class)
42-
public final class LettuceTracingAutoConfiguration {
43-
/// [lettuce doc](https://redis.github.io/lettuce/advanced-usage/#tracing)
44-
@Bean
45-
public ClientResourcesBuilderCustomizer lettuceTracing(ObservationRegistry observationRegistry) {
46-
return (client) -> client.tracing(new MicrometerTracing(observationRegistry, "Redis"));
47-
}
42+
public final class LettuceObservationAutoConfiguration {
43+
44+
@Bean
45+
ClientResourcesBuilderCustomizer lettuceObservation(ObservationRegistry observationRegistry) {
46+
return (client) -> client.tracing(new MicrometerTracing(observationRegistry, "Redis"));
47+
}
48+
4849
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
*/
1616

1717
/**
18-
* Auto-configuration for Spring Data Redis metrics.
18+
* Auto-configuration for Spring Data Redis observation.
1919
*/
2020
@NullMarked
21-
package org.springframework.boot.data.redis.autoconfigure.metrics;
21+
package org.springframework.boot.data.redis.autoconfigure.observation;
2222

2323
import org.jspecify.annotations.NullMarked;
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
org.springframework.boot.data.redis.autoconfigure.DataRedisAutoConfiguration
2-
org.springframework.boot.data.redis.autoconfigure.LettuceTracingAutoConfiguration
32
org.springframework.boot.data.redis.autoconfigure.DataRedisReactiveAutoConfiguration
43
org.springframework.boot.data.redis.autoconfigure.DataRedisRepositoriesAutoConfiguration
54
org.springframework.boot.data.redis.autoconfigure.health.DataRedisHealthContributorAutoConfiguration
65
org.springframework.boot.data.redis.autoconfigure.health.DataRedisReactiveHealthContributorAutoConfiguration
7-
org.springframework.boot.data.redis.autoconfigure.metrics.LettuceMetricsAutoConfiguration
6+
org.springframework.boot.data.redis.autoconfigure.observation.LettuceObservationAutoConfiguration

module/spring-boot-data-redis/src/test/java/org/springframework/boot/data/redis/autoconfigure/metrics/LettuceMetricsAutoConfigurationTests.java

Lines changed: 0 additions & 102 deletions
This file was deleted.
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/*
2+
* Copyright 2012-present the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.boot.data.redis.autoconfigure.observation;
18+
19+
import io.lettuce.core.resource.ClientResources;
20+
import io.lettuce.core.tracing.MicrometerTracing;
21+
import io.micrometer.observation.tck.TestObservationRegistry;
22+
import org.junit.jupiter.api.Test;
23+
24+
import org.springframework.boot.autoconfigure.AutoConfigurations;
25+
import org.springframework.boot.data.redis.autoconfigure.DataRedisAutoConfiguration;
26+
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
27+
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
28+
29+
import static org.assertj.core.api.Assertions.assertThat;
30+
31+
/**
32+
* Tests for {@link LettuceObservationAutoConfiguration}.
33+
*
34+
* @author Antonin Arquey
35+
* @author Stephane Nicoll
36+
*/
37+
class LettuceObservationAutoConfigurationTests {
38+
39+
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
40+
.withConfiguration(AutoConfigurations.of(LettuceObservationAutoConfiguration.class));
41+
42+
@Test
43+
void whenThereIsAnObservationRegistryThenMicrometerTracingIsAdded() {
44+
this.contextRunner.withBean(TestObservationRegistry.class, TestObservationRegistry::create)
45+
.withConfiguration(AutoConfigurations.of(DataRedisAutoConfiguration.class))
46+
.run((context) -> {
47+
ClientResources clientResources = context.getBean(LettuceConnectionFactory.class).getClientResources();
48+
assertThat(clientResources.tracing()).isInstanceOf(MicrometerTracing.class);
49+
});
50+
51+
}
52+
53+
@Test
54+
void whenThereIsNoObservationRegistryThenClientResourcesCustomizationBacksOff() {
55+
this.contextRunner.withConfiguration(AutoConfigurations.of(DataRedisAutoConfiguration.class)).run((context) -> {
56+
ClientResources clientResources = context.getBean(LettuceConnectionFactory.class).getClientResources();
57+
assertThat(clientResources.tracing()).isNotInstanceOf(MicrometerTracing.class);
58+
});
59+
}
60+
61+
}

0 commit comments

Comments
 (0)