Skip to content

Commit 8d2ce6a

Browse files
authored
Added support for Micrometer to Spring Boot 1 starter. (ReactiveX#444)
1 parent fa843d3 commit 8d2ce6a

14 files changed

+248
-15
lines changed

libraries.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ ext {
9999
// Micrometers addon
100100
micrometer: "io.micrometer:micrometer-core:${micrometerVersion}",
101101
micrometer_prometheus: "io.micrometer:micrometer-registry-prometheus:${micrometerVersion}",
102+
micrometer_spring_legacy: "io.micrometer:micrometer-spring-legacy:${micrometerVersion}",
102103

103104
// CircuitBreaker documentation
104105
metrics_healthcheck: "io.dropwizard.metrics:metrics-healthchecks:${metricsVersion}",

resilience4j-metrics/src/test/java/io/github/resilience4j/metrics/CircuitBreakerMetricsTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public void setUp(){
4444
}
4545

4646
@Test
47-
public void shouldRegisterMetrics() throws Throwable {
47+
public void shouldRegisterMetrics() {
4848
//Given
4949
CircuitBreakerRegistry circuitBreakerRegistry = CircuitBreakerRegistry.ofDefaults();
5050
CircuitBreaker circuitBreaker = circuitBreakerRegistry.circuitBreaker("testName");

resilience4j-spring-boot/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@ dependencies {
33

44
compileOnly project(':resilience4j-prometheus')
55
compileOnly project(':resilience4j-metrics')
6+
compileOnly project(':resilience4j-micrometer')
67

78
compileOnly(libraries.spring_boot_aop)
89
compileOnly(libraries.spring_boot_actuator)
910
compileOnly(libraries.spring_boot_web)
1011
compileOnly(libraries.reactor)
1112
compileOnly(libraries.metrics)
13+
compileOnly(libraries.micrometer_spring_legacy)
1214
compileOnly(libraries.hibernate_validator)
1315
compileOnly(libraries.spring_boot_config_processor)
1416
compileOnly(libraries.spring_boot_autoconfigure_processor)

resilience4j-spring-boot/src/main/java/io/github/resilience4j/bulkhead/autoconfigure/BulkheadMetricsAutoConfiguration.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,19 @@
1515
*/
1616
package io.github.resilience4j.bulkhead.autoconfigure;
1717

18+
import com.codahale.metrics.MetricRegistry;
19+
import io.github.resilience4j.bulkhead.BulkheadRegistry;
20+
import io.github.resilience4j.metrics.BulkheadMetrics;
1821
import org.springframework.boot.actuate.autoconfigure.MetricRepositoryAutoConfiguration;
1922
import org.springframework.boot.actuate.autoconfigure.MetricsDropwizardAutoConfiguration;
2023
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
2124
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
2225
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2326
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
27+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
2428
import org.springframework.context.annotation.Bean;
2529
import org.springframework.context.annotation.Configuration;
2630

27-
import com.codahale.metrics.MetricRegistry;
28-
29-
import io.github.resilience4j.bulkhead.BulkheadRegistry;
30-
import io.github.resilience4j.metrics.BulkheadMetrics;
31-
3231
/**
3332
* {@link org.springframework.boot.autoconfigure.EnableAutoConfiguration
3433
* Auto-configuration} for resilience4j-metrics.
@@ -37,6 +36,7 @@
3736
@ConditionalOnClass(MetricRegistry.class)
3837
@AutoConfigureAfter(value = {MetricsDropwizardAutoConfiguration.class})
3938
@AutoConfigureBefore(MetricRepositoryAutoConfiguration.class)
39+
@ConditionalOnProperty(value = "resilience4j.bulkhead.metrics.enabled", matchIfMissing = true)
4040
public class BulkheadMetricsAutoConfiguration {
4141
@Bean
4242
@ConditionalOnMissingBean
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/*
2+
* Copyright 2019 lespinsideg
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+
* http://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+
package io.github.resilience4j.bulkhead.autoconfigure;
17+
18+
import io.github.resilience4j.bulkhead.BulkheadRegistry;
19+
import io.github.resilience4j.micrometer.BulkheadMetrics;
20+
import io.github.resilience4j.micrometer.tagged.TaggedBulkheadMetrics;
21+
import io.micrometer.spring.autoconfigure.CompositeMeterRegistryAutoConfiguration;
22+
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
23+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
24+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
25+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
26+
import org.springframework.context.annotation.Bean;
27+
import org.springframework.context.annotation.Configuration;
28+
29+
/**
30+
* {@link org.springframework.boot.autoconfigure.EnableAutoConfiguration
31+
* Auto-configuration} for resilience4j-metrics.
32+
*/
33+
@Configuration
34+
@ConditionalOnClass(CompositeMeterRegistryAutoConfiguration.class)
35+
@AutoConfigureAfter(value = {CompositeMeterRegistryAutoConfiguration.class})
36+
@ConditionalOnProperty(value = "resilience4j.bulkhead.metrics.enabled", matchIfMissing = true)
37+
public class BulkheadMicrometerAutoConfiguration {
38+
39+
@Bean
40+
@ConditionalOnProperty(value = "resilience4j.bulkhead.metrics.use_legacy_binder", havingValue = "true")
41+
@ConditionalOnMissingBean
42+
public BulkheadMetrics registerLegacyBulkheadMetrics(BulkheadRegistry bulkheadRegistry) {
43+
return BulkheadMetrics.ofBulkheadRegistry(bulkheadRegistry);
44+
}
45+
46+
@Bean
47+
@ConditionalOnProperty(
48+
value = "resilience4j.bulkhead.metrics.use_legacy_binder",
49+
havingValue = "false",
50+
matchIfMissing = true
51+
)
52+
@ConditionalOnMissingBean
53+
public TaggedBulkheadMetrics registerBulkheadMetrics(BulkheadRegistry bulkheadRegistry) {
54+
return TaggedBulkheadMetrics.ofBulkheadRegistry(bulkheadRegistry);
55+
}
56+
}

resilience4j-spring-boot/src/main/java/io/github/resilience4j/bulkhead/autoconfigure/BulkheadPrometheusAutoConfiguration.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
@Configuration
3434
@AutoConfigureAfter(value = BulkheadAutoConfiguration.class)
3535
@ConditionalOnClass(BulkheadMetricsCollector.class)
36+
@ConditionalOnProperty(value = "resilience4j.bulkhead.metrics.enabled", matchIfMissing = true)
3637
public class BulkheadPrometheusAutoConfiguration {
3738

3839
@Bean

resilience4j-spring-boot/src/main/java/io/github/resilience4j/circuitbreaker/autoconfigure/CircuitBreakerMetricsAutoConfiguration.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package io.github.resilience4j.circuitbreaker.autoconfigure;
1717

18+
import com.codahale.metrics.MetricRegistry;
1819
import io.github.resilience4j.circuitbreaker.CircuitBreakerRegistry;
1920
import io.github.resilience4j.metrics.CircuitBreakerMetrics;
2021
import org.springframework.boot.actuate.autoconfigure.MetricRepositoryAutoConfiguration;
@@ -23,11 +24,10 @@
2324
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
2425
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2526
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
27+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
2628
import org.springframework.context.annotation.Bean;
2729
import org.springframework.context.annotation.Configuration;
2830

29-
import com.codahale.metrics.MetricRegistry;
30-
3131
/**
3232
* {@link org.springframework.boot.autoconfigure.EnableAutoConfiguration
3333
* Auto-configuration} for resilience4j-metrics.
@@ -36,6 +36,7 @@
3636
@ConditionalOnClass(MetricRegistry.class)
3737
@AutoConfigureAfter(value = {CircuitBreakerAutoConfiguration.class, MetricsDropwizardAutoConfiguration.class})
3838
@AutoConfigureBefore(MetricRepositoryAutoConfiguration.class)
39+
@ConditionalOnProperty(value = "resilience4j.circuitbreaker.metrics.enabled", matchIfMissing = true)
3940
public class CircuitBreakerMetricsAutoConfiguration {
4041
@Bean
4142
@ConditionalOnMissingBean
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/*
2+
* Copyright 2017 Robert Winkler
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+
* http://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+
package io.github.resilience4j.circuitbreaker.autoconfigure;
17+
18+
import io.github.resilience4j.circuitbreaker.CircuitBreakerRegistry;
19+
import io.github.resilience4j.micrometer.CircuitBreakerMetrics;
20+
import io.github.resilience4j.micrometer.tagged.TaggedCircuitBreakerMetrics;
21+
import io.micrometer.spring.autoconfigure.CompositeMeterRegistryAutoConfiguration;
22+
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
23+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
24+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
25+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
26+
import org.springframework.context.annotation.Bean;
27+
import org.springframework.context.annotation.Configuration;
28+
29+
/**
30+
* {@link org.springframework.boot.autoconfigure.EnableAutoConfiguration
31+
* Auto-configuration} for resilience4j-metrics.
32+
*/
33+
@Configuration
34+
@ConditionalOnClass(CompositeMeterRegistryAutoConfiguration.class)
35+
@AutoConfigureAfter(value = {CircuitBreakerAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class})
36+
@ConditionalOnProperty(value = "resilience4j.circuitbreaker.metrics.enabled", matchIfMissing = true)
37+
public class CircuitBreakerMicrometerAutoConfiguration {
38+
39+
@Bean
40+
@ConditionalOnMissingBean
41+
@ConditionalOnProperty(value = "resilience4j.circuitbreaker.metrics.use_legacy_binder", havingValue = "true")
42+
public CircuitBreakerMetrics registerLegacyCircuitBreakerMetrics(CircuitBreakerRegistry circuitBreakerRegistry) {
43+
return CircuitBreakerMetrics.ofCircuitBreakerRegistry(circuitBreakerRegistry);
44+
}
45+
46+
@Bean
47+
@ConditionalOnMissingBean
48+
@ConditionalOnProperty(
49+
value = "resilience4j.circuitbreaker.metrics.use_legacy_binder",
50+
havingValue = "false",
51+
matchIfMissing = true
52+
)
53+
public TaggedCircuitBreakerMetrics registerCircuitBreakerMetrics(CircuitBreakerRegistry circuitBreakerRegistry) {
54+
return TaggedCircuitBreakerMetrics.ofCircuitBreakerRegistry(circuitBreakerRegistry);
55+
}
56+
}

resilience4j-spring-boot/src/main/java/io/github/resilience4j/circuitbreaker/autoconfigure/CircuitBreakerPrometheusAutoConfiguration.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
@Configuration
3333
@AutoConfigureAfter(value = CircuitBreakerAutoConfiguration.class)
3434
@ConditionalOnClass(CircuitBreakerMetricsCollector.class)
35+
@ConditionalOnProperty(value = "resilience4j.circuitbreaker.metrics.enabled", matchIfMissing = true)
3536
public class CircuitBreakerPrometheusAutoConfiguration {
3637

3738
@Bean

resilience4j-spring-boot/src/main/java/io/github/resilience4j/ratelimiter/autoconfigure/RateLimiterMetricsAutoConfiguration.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package io.github.resilience4j.ratelimiter.autoconfigure;
1717

18+
import com.codahale.metrics.MetricRegistry;
1819
import io.github.resilience4j.metrics.RateLimiterMetrics;
1920
import io.github.resilience4j.ratelimiter.RateLimiterRegistry;
2021
import org.springframework.boot.actuate.autoconfigure.MetricRepositoryAutoConfiguration;
@@ -23,11 +24,10 @@
2324
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
2425
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2526
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
27+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
2628
import org.springframework.context.annotation.Bean;
2729
import org.springframework.context.annotation.Configuration;
2830

29-
import com.codahale.metrics.MetricRegistry;
30-
3131
/**
3232
* {@link org.springframework.boot.autoconfigure.EnableAutoConfiguration
3333
* Auto-configuration} for resilience4j-metrics.
@@ -36,6 +36,7 @@
3636
@ConditionalOnClass(MetricRegistry.class)
3737
@AutoConfigureAfter(value = {RateLimiterAutoConfiguration.class, MetricsDropwizardAutoConfiguration.class})
3838
@AutoConfigureBefore(MetricRepositoryAutoConfiguration.class)
39+
@ConditionalOnProperty(value = "resilience4j.ratelimiter.metrics.enabled", matchIfMissing = true)
3940
public class RateLimiterMetricsAutoConfiguration {
4041

4142
@Bean
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/*
2+
* Copyright 2017 Bohdan Storozhuk
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+
* http://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+
package io.github.resilience4j.ratelimiter.autoconfigure;
17+
18+
import io.github.resilience4j.circuitbreaker.autoconfigure.CircuitBreakerAutoConfiguration;
19+
import io.github.resilience4j.micrometer.RateLimiterMetrics;
20+
import io.github.resilience4j.micrometer.tagged.TaggedRateLimiterMetrics;
21+
import io.github.resilience4j.ratelimiter.RateLimiterRegistry;
22+
import io.micrometer.spring.autoconfigure.CompositeMeterRegistryAutoConfiguration;
23+
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
24+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
25+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
26+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
27+
import org.springframework.context.annotation.Bean;
28+
import org.springframework.context.annotation.Configuration;
29+
30+
/**
31+
* {@link org.springframework.boot.autoconfigure.EnableAutoConfiguration
32+
* Auto-configuration} for resilience4j-metrics.
33+
*/
34+
@Configuration
35+
@ConditionalOnClass(CompositeMeterRegistryAutoConfiguration.class)
36+
@AutoConfigureAfter(value = {CircuitBreakerAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class})
37+
@ConditionalOnProperty(value = "resilience4j.ratelimiter.metrics.enabled", matchIfMissing = true)
38+
public class RateLimiterMicrometerAutoConfiguration {
39+
40+
@Bean
41+
@ConditionalOnMissingBean
42+
@ConditionalOnProperty(value = "resilience4j.ratelimiter.metrics.use_legacy_binder", havingValue = "true")
43+
public RateLimiterMetrics registerLegacyRateLimiterMetrics(RateLimiterRegistry rateLimiterRegistry) {
44+
return RateLimiterMetrics.ofRateLimiterRegistry(rateLimiterRegistry);
45+
}
46+
47+
@Bean
48+
@ConditionalOnMissingBean
49+
@ConditionalOnProperty(
50+
value = "resilience4j.ratelimiter.metrics.use_legacy_binder",
51+
havingValue = "false",
52+
matchIfMissing = true
53+
)
54+
public TaggedRateLimiterMetrics registerRateLimiterMetrics(RateLimiterRegistry rateLimiterRegistry) {
55+
return TaggedRateLimiterMetrics.ofRateLimiterRegistry(rateLimiterRegistry);
56+
}
57+
}

resilience4j-spring-boot/src/main/java/io/github/resilience4j/ratelimiter/autoconfigure/RateLimiterPrometheusAutoConfiguration.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
@Configuration
3333
@AutoConfigureAfter(value = RateLimiterAutoConfiguration.class)
3434
@ConditionalOnClass(RateLimiterMetricsCollector.class)
35+
@ConditionalOnProperty(value = "resilience4j.ratelimiter.metrics.enabled", matchIfMissing = true)
3536
public class RateLimiterPrometheusAutoConfiguration {
3637

3738
@ConditionalOnProperty(value = "resilience4j.ratelimiter.metrics.use_legacy_collector", havingValue = "true")

resilience4j-spring-boot/src/main/java/io/github/resilience4j/retry/autoconfigure/RetryMetricsAutoConfiguration.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,19 @@
1515
*/
1616
package io.github.resilience4j.retry.autoconfigure;
1717

18+
import com.codahale.metrics.MetricRegistry;
19+
import io.github.resilience4j.metrics.RetryMetrics;
20+
import io.github.resilience4j.retry.RetryRegistry;
1821
import org.springframework.boot.actuate.autoconfigure.MetricRepositoryAutoConfiguration;
1922
import org.springframework.boot.actuate.autoconfigure.MetricsDropwizardAutoConfiguration;
2023
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
2124
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
2225
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2326
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
27+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
2428
import org.springframework.context.annotation.Bean;
2529
import org.springframework.context.annotation.Configuration;
2630

27-
import com.codahale.metrics.MetricRegistry;
28-
29-
import io.github.resilience4j.metrics.RetryMetrics;
30-
import io.github.resilience4j.retry.RetryRegistry;
31-
3231
/**
3332
* {@link org.springframework.boot.autoconfigure.EnableAutoConfiguration
3433
* Auto-configuration} for resilience4j-metrics.
@@ -38,6 +37,7 @@
3837
@ConditionalOnClass(MetricRegistry.class)
3938
@AutoConfigureAfter(value = {RetryAutoConfiguration.class, MetricsDropwizardAutoConfiguration.class})
4039
@AutoConfigureBefore(MetricRepositoryAutoConfiguration.class)
40+
@ConditionalOnProperty(value = "resilience4j.retry.metrics.enabled", matchIfMissing = true)
4141
public class RetryMetricsAutoConfiguration {
4242

4343
@Bean

0 commit comments

Comments
 (0)