Skip to content

Commit e908e88

Browse files
committed
Move SpelTagValueExpressionResolver to metrics package. Fix checkstyle.
Signed-off-by: Dominique Villard <[email protected]>
1 parent 9711790 commit e908e88

File tree

6 files changed

+42
-27
lines changed

6 files changed

+42
-27
lines changed

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAspectsAutoConfiguration.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import org.aspectj.weaver.Advice;
2525

2626
import org.springframework.beans.factory.BeanFactory;
27-
import org.springframework.boot.actuate.autoconfigure.tracing.SpelTagValueExpressionResolver;
2827
import org.springframework.boot.autoconfigure.AutoConfiguration;
2928
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
3029
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
@@ -38,6 +37,7 @@
3837
* aspects.
3938
*
4039
* @author Jonatan Ivanov
40+
* @author Dominique Villard
4141
* @since 3.2.0
4242
*/
4343
@AutoConfiguration(after = { MetricsAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class })
@@ -48,33 +48,34 @@ public class MetricsAspectsAutoConfiguration {
4848

4949
@Bean
5050
@ConditionalOnMissingBean
51-
CountedAspect countedAspect(MeterRegistry registry, CountedMeterTagAnnotationHandler countedMeterTagAnnotationHandler) {
51+
CountedAspect countedAspect(MeterRegistry registry,
52+
CountedMeterTagAnnotationHandler countedMeterTagAnnotationHandler) {
5253
CountedAspect countedAspect = new CountedAspect(registry);
5354
countedAspect.setMeterTagAnnotationHandler(countedMeterTagAnnotationHandler);
5455
return countedAspect;
5556
}
5657

5758
@Bean
5859
@ConditionalOnMissingBean
59-
TimedAspect timedAspect(MeterRegistry registry,
60-
MeterTagAnnotationHandler meterTagAnnotationHandler) {
60+
TimedAspect timedAspect(MeterRegistry registry, MeterTagAnnotationHandler meterTagAnnotationHandler) {
6161
TimedAspect timedAspect = new TimedAspect(registry);
6262
timedAspect.setMeterTagAnnotationHandler(meterTagAnnotationHandler);
6363
return timedAspect;
6464
}
6565

6666
@Bean
6767
@ConditionalOnMissingBean
68-
CountedMeterTagAnnotationHandler countedMeterTagAnnotationHandler(
69-
BeanFactory beanFactory, SpelTagValueExpressionResolver metricsTagValueExpressionResolver) {
70-
return new CountedMeterTagAnnotationHandler(beanFactory::getBean, ignored -> metricsTagValueExpressionResolver);
68+
CountedMeterTagAnnotationHandler countedMeterTagAnnotationHandler(BeanFactory beanFactory,
69+
SpelTagValueExpressionResolver metricsTagValueExpressionResolver) {
70+
return new CountedMeterTagAnnotationHandler(beanFactory::getBean,
71+
(ignored) -> metricsTagValueExpressionResolver);
7172
}
7273

7374
@Bean
7475
@ConditionalOnMissingBean
75-
MeterTagAnnotationHandler meterTagAnnotationHandler(
76-
BeanFactory beanFactory, SpelTagValueExpressionResolver meterTagValueExpressionResolver) {
77-
return new MeterTagAnnotationHandler(beanFactory::getBean, ignored -> meterTagValueExpressionResolver);
76+
MeterTagAnnotationHandler meterTagAnnotationHandler(BeanFactory beanFactory,
77+
SpelTagValueExpressionResolver meterTagValueExpressionResolver) {
78+
return new MeterTagAnnotationHandler(beanFactory::getBean, (ignored) -> meterTagValueExpressionResolver);
7879
}
7980

8081
@Bean
Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,25 +14,35 @@
1414
* limitations under the License.
1515
*/
1616

17-
package org.springframework.boot.actuate.autoconfigure.tracing;
17+
package org.springframework.boot.actuate.autoconfigure.metrics;
1818

1919
import java.util.Map;
2020
import java.util.concurrent.ConcurrentHashMap;
2121

2222
import io.micrometer.common.annotation.ValueExpressionResolver;
23+
import io.micrometer.core.aop.MeterTag;
24+
import io.micrometer.tracing.annotation.SpanTag;
2325

2426
import org.springframework.expression.Expression;
2527
import org.springframework.expression.spel.standard.SpelExpressionParser;
2628
import org.springframework.expression.spel.support.SimpleEvaluationContext;
2729

30+
/**
31+
* Evaluates a Spel expression applied to a parameter for use in {@link MeterTag}
32+
* {@link SpanTag} Micrometer annotations.
33+
*
34+
* @author Dominique Villard
35+
* @since 3.5.1
36+
*/
2837
public class SpelTagValueExpressionResolver implements ValueExpressionResolver {
2938

3039
private final Map<String, Expression> expressionMap = new ConcurrentHashMap<>();
3140

3241
@Override
3342
public String resolve(String expression, Object parameter) {
3443
try {
35-
Expression expressionValue = this.expressionMap.computeIfAbsent(expression, SpelTagValueExpressionResolver::parseExpression);
44+
Expression expressionValue = this.expressionMap.computeIfAbsent(expression,
45+
SpelTagValueExpressionResolver::parseExpression);
3646
SimpleEvaluationContext context = SimpleEvaluationContext.forReadOnlyDataBinding().build();
3747
return expressionValue.getValue(context, parameter, String.class);
3848
}
@@ -44,4 +54,5 @@ public String resolve(String expression, Object parameter) {
4454
private static Expression parseExpression(String expression) {
4555
return new SpelExpressionParser().parseExpression(expression);
4656
}
57+
4758
}

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/MicrometerTracingAutoConfiguration.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.aspectj.weaver.Advice;
3131

3232
import org.springframework.beans.factory.BeanFactory;
33+
import org.springframework.boot.actuate.autoconfigure.metrics.SpelTagValueExpressionResolver;
3334
import org.springframework.boot.autoconfigure.AutoConfiguration;
3435
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
3536
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
@@ -114,7 +115,8 @@ SpelTagValueExpressionResolver spanTagValueExpressionResolver() {
114115

115116
@Bean
116117
@ConditionalOnMissingBean
117-
SpanTagAnnotationHandler spanTagAnnotationHandler(BeanFactory beanFactory, SpelTagValueExpressionResolver spanTagValueExpressionResolver) {
118+
SpanTagAnnotationHandler spanTagAnnotationHandler(BeanFactory beanFactory,
119+
SpelTagValueExpressionResolver spanTagValueExpressionResolver) {
118120
return new SpanTagAnnotationHandler(beanFactory::getBean, (ignored) -> spanTagValueExpressionResolver);
119121
}
120122

@@ -132,4 +134,5 @@ SpanAspect spanAspect(MethodInvocationProcessor methodInvocationProcessor) {
132134
}
133135

134136
}
137+
135138
}

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAspectsAutoConfigurationTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ void shouldConfigureCounterMeterTagAnnotationHandler() {
7777
this.contextRunner.withUserConfiguration(MeterTagAnnotationHandlerConfiguration.class).run((context) -> {
7878
assertThat(context).hasSingleBean(CountedAspect.class);
7979
assertThat(ReflectionTestUtils.getField(context.getBean(CountedAspect.class), "meterTagAnnotationHandler"))
80-
.isSameAs(context.getBean(CountedMeterTagAnnotationHandler.class));
80+
.isSameAs(context.getBean(CountedMeterTagAnnotationHandler.class));
8181
});
8282
}
8383

@@ -142,6 +142,7 @@ MeterTagAnnotationHandler meterTagAnnotationHandler() {
142142
CountedMeterTagAnnotationHandler countedMeterTagAnnotationHandler() {
143143
return new CountedMeterTagAnnotationHandler(null, null);
144144
}
145+
145146
}
146147

147148
}
Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.springframework.boot.actuate.autoconfigure.metrics;
1818

19+
import java.util.Collections;
1920
import java.util.Map;
2021
import java.util.stream.Stream;
2122

@@ -24,14 +25,13 @@
2425
import org.junit.jupiter.params.provider.Arguments;
2526
import org.junit.jupiter.params.provider.MethodSource;
2627

27-
import org.springframework.boot.actuate.autoconfigure.tracing.SpelTagValueExpressionResolver;
2828
import org.springframework.data.util.Pair;
2929
import org.springframework.test.util.ReflectionTestUtils;
3030

3131
import static org.assertj.core.api.Assertions.assertThat;
32-
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
32+
import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
3333

34-
class SpelTagValueExpressionResolverTest {
34+
class SpelTagValueExpressionResolverTests {
3535

3636
final SpelTagValueExpressionResolver resolver = new SpelTagValueExpressionResolver();
3737

@@ -42,9 +42,7 @@ void checkValidExpression(Object value, String expression, String expected) {
4242
}
4343

4444
static Stream<Arguments> checkValidExpression() {
45-
return Stream.of(
46-
Arguments.of("foo", "length", "3"),
47-
Arguments.of("foo", "isEmpty", "false"),
45+
return Stream.of(Arguments.of("foo", "length", "3"), Arguments.of("foo", "isEmpty", "false"),
4846
Arguments.of(Pair.of("left", "right"), "first", "left"),
4947
Arguments.of(Map.of("foo", "bar"), "['foo']", "bar"),
5048
Arguments.of(Map.of("foo", "bar"), "['baz']", null),
@@ -55,20 +53,18 @@ static Stream<Arguments> checkValidExpression() {
5553
@ParameterizedTest
5654
@MethodSource
5755
void checkInvalidExpression(Object value, String expression) {
58-
assertThatExceptionOfType(IllegalStateException.class).isThrownBy(() -> this.resolver.resolve(expression, value));
56+
assertThatIllegalStateException().isThrownBy(() -> this.resolver.resolve(expression, value));
5957
}
6058

6159
static Stream<Arguments> checkInvalidExpression() {
62-
return Stream.of(
63-
Arguments.of("foo", "unknownMethod"),
64-
Arguments.of(null, "length"),
60+
return Stream.of(Arguments.of("foo", "unknownMethod"), Arguments.of(null, "length"),
6561
Arguments.of(Map.of("foo", Pair.of(1, 2)), "['bar'].first"),
66-
Arguments.of(Map.of(), "invalid expression"));
62+
Arguments.of(Collections.emptyMap(), "invalid expression"));
6763
}
6864

6965
@Test
7066
void checkParserReuse() {
71-
var map = (Map<?, ?>) ReflectionTestUtils.getField(this.resolver,"expressionMap");
67+
var map = (Map<?, ?>) ReflectionTestUtils.getField(this.resolver, "expressionMap");
7268

7369
this.resolver.resolve("length", "foo");
7470
this.resolver.resolve("length", "bar");
@@ -78,4 +74,5 @@ void checkParserReuse() {
7874
this.resolver.resolve("isEmpty", "foo");
7975
assertThat(map).hasSize(2);
8076
}
81-
}
77+
78+
}

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/MicrometerTracingAutoConfigurationTests.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.aspectj.weaver.Advice;
3636
import org.junit.jupiter.api.Test;
3737

38+
import org.springframework.boot.actuate.autoconfigure.metrics.SpelTagValueExpressionResolver;
3839
import org.springframework.boot.autoconfigure.AutoConfigurations;
3940
import org.springframework.boot.test.context.FilteredClassLoader;
4041
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
@@ -245,6 +246,7 @@ SpanTagAnnotationHandler customSpanTagAnnotationHandler() {
245246
SpelTagValueExpressionResolver customMetricsTagValueExpressionResolver() {
246247
return mock(SpelTagValueExpressionResolver.class);
247248
}
249+
248250
}
249251

250252
@Configuration(proxyBeanMethods = false)

0 commit comments

Comments
 (0)