From 8db1d0e0449c46e812c5b136d9503ec8cb8eff21 Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Sun, 19 Jan 2014 16:00:10 +0000 Subject: [PATCH] Fix some TODOs --- .../autoconfigure/ErrorMvcAutoConfiguration.java | 8 +++++++- .../repository/redis/RedisMetricRepository.java | 9 ++++++--- .../redis/RedisMultiMetricRepository.java | 8 ++++++-- .../autoconfigure/web/WebMvcAutoConfiguration.java | 13 +++++++++++++ .../jmx/JmxAutoConfigurationTests.java | 9 +++++++-- .../boot/config/PropertySourceLoader.java | 2 +- .../boot/BeanDefinitionLoaderTests.java | 2 -- 7 files changed, 40 insertions(+), 11 deletions(-) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ErrorMvcAutoConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ErrorMvcAutoConfiguration.java index 81470d7291..d50bef0a04 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ErrorMvcAutoConfiguration.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ErrorMvcAutoConfiguration.java @@ -126,7 +126,13 @@ public class ErrorMvcAutoConfiguration implements EmbeddedServletContainerCustom .noMatch("Thymeleaf template found for error view"); } } - // FIXME: add matcher for JSP view if Jasper detected + if (ClassUtils.isPresent("org.apache.jasper.compiler.JspConfig", + context.getClassLoader())) { + if (WebMvcAutoConfiguration.templateExists(context.getEnvironment(), + context.getResourceLoader(), "error")) { + return ConditionOutcome.noMatch("JSP template found for error view"); + } + } return ConditionOutcome.match("no error template view detected"); }; } diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/repository/redis/RedisMetricRepository.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/repository/redis/RedisMetricRepository.java index bc2cc1df22..f037e8c59d 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/repository/redis/RedisMetricRepository.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/repository/redis/RedisMetricRepository.java @@ -17,6 +17,7 @@ package org.springframework.boot.actuate.metrics.repository.redis; import java.util.ArrayList; +import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.Set; @@ -129,13 +130,15 @@ public class RedisMetricRepository implements MetricRepository { } } - // TODO: memorize timestamps as well? private Metric deserialize(String redisKey, String v) { - return new Metric(nameFor(redisKey), Double.valueOf(v)); + String[] vals = v.split("@"); + Double value = Double.valueOf(vals[0]); + Date timestamp = vals.length > 1 ? new Date(Long.valueOf(vals[1])) : new Date(); + return new Metric(nameFor(redisKey), value, timestamp); } private String serialize(Metric entity) { - return String.valueOf(entity.getValue()); + return String.valueOf(entity.getValue()) + "@" + entity.getTimestamp().getTime(); } private String keyFor(String name) { diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/repository/redis/RedisMultiMetricRepository.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/repository/redis/RedisMultiMetricRepository.java index 1d1473adef..2f09765367 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/repository/redis/RedisMultiMetricRepository.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/repository/redis/RedisMultiMetricRepository.java @@ -18,6 +18,7 @@ package org.springframework.boot.actuate.metrics.repository.redis; import java.util.ArrayList; import java.util.Collection; +import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.Set; @@ -127,11 +128,14 @@ public class RedisMultiMetricRepository implements MultiMetricRepository { } private Metric deserialize(String redisKey, String v) { - return new Metric(nameFor(redisKey), Double.valueOf(v)); + String[] vals = v.split("@"); + Double value = Double.valueOf(vals[0]); + Date timestamp = vals.length > 1 ? new Date(Long.valueOf(vals[1])) : new Date(); + return new Metric(nameFor(redisKey), value, timestamp); } private String serialize(Metric entity) { - return String.valueOf(entity.getValue()); + return String.valueOf(entity.getValue() + "@" + entity.getTimestamp().getTime()); } private String keyFor(String name) { diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration.java index f593c8a6de..2870255ccc 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration.java @@ -42,6 +42,7 @@ import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import org.springframework.core.convert.converter.Converter; import org.springframework.core.convert.converter.GenericConverter; +import org.springframework.core.env.Environment; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; @@ -103,12 +104,24 @@ public class WebMvcAutoConfiguration { } } + public static String DEFAULT_PREFIX = ""; + public static String DEFAULT_SUFFIX = ""; + @Bean @ConditionalOnMissingBean(HiddenHttpMethodFilter.class) public HiddenHttpMethodFilter hiddenHttpMethodFilter() { return new HiddenHttpMethodFilter(); } + public static boolean templateExists(Environment environment, + ResourceLoader resourceLoader, String view) { + String prefix = environment.getProperty("spring.view.prefix", + WebMvcAutoConfiguration.DEFAULT_PREFIX); + String suffix = environment.getProperty("spring.view.suffix", + WebMvcAutoConfiguration.DEFAULT_SUFFIX); + return resourceLoader.getResource(prefix + view + suffix).exists(); + } + // Defined as a nested config to ensure WebMvcConfigurerAdapter it not read when not // on the classpath @EnableWebMvc diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jmx/JmxAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jmx/JmxAutoConfigurationTests.java index bba6f09696..fbea71f8f6 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jmx/JmxAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jmx/JmxAutoConfigurationTests.java @@ -28,8 +28,11 @@ import org.springframework.jmx.export.MBeanExporter; import org.springframework.jmx.export.annotation.ManagedAttribute; import org.springframework.jmx.export.annotation.ManagedOperation; import org.springframework.jmx.export.annotation.ManagedResource; +import org.springframework.jmx.export.naming.MetadataNamingStrategy; import org.springframework.mock.env.MockEnvironment; +import org.springframework.test.util.ReflectionTestUtils; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; /** @@ -95,8 +98,10 @@ public class JmxAutoConfigurationTests { MBeanExporter mBeanExporter = this.context.getBean(MBeanExporter.class); assertNotNull(mBeanExporter); - - // TODO cdupuis add test for default domain + MetadataNamingStrategy naming = (MetadataNamingStrategy) ReflectionTestUtils + .getField(mBeanExporter, "metadataNamingStrategy"); + assertEquals("my-test-domain", + ReflectionTestUtils.getField(naming, "defaultDomain")); } @Configuration diff --git a/spring-boot/src/main/java/org/springframework/boot/config/PropertySourceLoader.java b/spring-boot/src/main/java/org/springframework/boot/config/PropertySourceLoader.java index 7ff20be8f2..97f0ce0470 100644 --- a/spring-boot/src/main/java/org/springframework/boot/config/PropertySourceLoader.java +++ b/spring-boot/src/main/java/org/springframework/boot/config/PropertySourceLoader.java @@ -34,7 +34,7 @@ public interface PropertySourceLoader { /** * Load the resource into a property source. - * @param name TODO + * @param name the name of the property source * @return a property source */ PropertySource load(String name, Resource resource); diff --git a/spring-boot/src/test/java/org/springframework/boot/BeanDefinitionLoaderTests.java b/spring-boot/src/test/java/org/springframework/boot/BeanDefinitionLoaderTests.java index 31dd422d2d..a0022babde 100644 --- a/spring-boot/src/test/java/org/springframework/boot/BeanDefinitionLoaderTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/BeanDefinitionLoaderTests.java @@ -33,8 +33,6 @@ import static org.junit.Assert.assertTrue; */ public class BeanDefinitionLoaderTests { - // FIXME - private StaticApplicationContext registry; @Before