|
4 | 4 | import com.codahale.metrics.servlet.InstrumentedFilter;
|
5 | 5 | import com.codahale.metrics.servlet.InstrumentedFilterContextListener;
|
6 | 6 | import javax.servlet.Filter;
|
| 7 | +import org.springframework.boot.autoconfigure.condition.ConditionOutcome; |
| 8 | +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; |
7 | 9 | import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
| 10 | +import org.springframework.boot.autoconfigure.condition.SpringBootCondition; |
| 11 | +import org.springframework.boot.context.properties.EnableConfigurationProperties; |
8 | 12 | import org.springframework.boot.web.servlet.FilterRegistrationBean;
|
9 | 13 | import org.springframework.context.annotation.Bean;
|
| 14 | +import org.springframework.context.annotation.ConditionContext; |
| 15 | +import org.springframework.context.annotation.Conditional; |
10 | 16 | import org.springframework.context.annotation.Configuration;
|
| 17 | +import org.springframework.core.type.AnnotatedTypeMetadata; |
11 | 18 |
|
12 | 19 | /**
|
13 | 20 | * Automatically adds a {@link InstrumentedFilter} to the servlet configuration when one is
|
14 | 21 | * present on the classpath.
|
15 | 22 | */
|
16 | 23 | @Configuration
|
| 24 | +@EnableConfigurationProperties(value = {ServletFilterProperties.class}) |
17 | 25 | @ConditionalOnClass(value = {InstrumentedFilter.class, Filter.class})
|
| 26 | +@ConditionalOnBean(value = {MetricRegistry.class}) |
| 27 | +@Conditional(ServletFilterAutoConfiguration.ServletFilterSetCondition.class) |
18 | 28 | public class ServletFilterAutoConfiguration {
|
19 | 29 |
|
20 | 30 | @Bean
|
@@ -47,4 +57,22 @@ private MetricRegistryContextListener(MetricRegistry metricRegistry) {
|
47 | 57 | }
|
48 | 58 | }
|
49 | 59 |
|
| 60 | + static final class ServletFilterSetCondition extends SpringBootCondition { |
| 61 | + private static final String ENABLED_PROPERTY = "metrics.servlet.enabled"; |
| 62 | + |
| 63 | + @Override public ConditionOutcome getMatchOutcome(ConditionContext context, |
| 64 | + AnnotatedTypeMetadata a) { |
| 65 | + |
| 66 | + boolean enabled = isTrue(context.getEnvironment().getProperty(ENABLED_PROPERTY, Boolean.class)); |
| 67 | + |
| 68 | + return enabled ? |
| 69 | + ConditionOutcome.match() : |
| 70 | + ConditionOutcome.noMatch(ENABLED_PROPERTY + " is false or not set"); |
| 71 | + } |
| 72 | + |
| 73 | + private static boolean isTrue(Boolean b) { |
| 74 | + return b != null && b; |
| 75 | + } |
| 76 | + } |
| 77 | + |
50 | 78 | }
|
0 commit comments