Fix issue where the Hystrix dashboard will not load

Overrides Spring Boot's FreeMarkerAutoConfiguration to prefer using a
SpringTemplateLoader instead of the file system. This corrects an issue
where Spring Boot may use an empty 'templates' file resource to resolve
templates instead of the packaged Hystrix classpath templates.

When creating a new project with Spring initializer, an empty
'templates' resource directory is automatically added to the new
project, causing a scenario where this issue may occur.
This commit is contained in:
Roy Clarkson
2014-12-16 15:43:13 -06:00
parent 75ff9540bb
commit 2c451ad73e
2 changed files with 26 additions and 0 deletions

View File

@@ -21,17 +21,42 @@ import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration;
import org.springframework.boot.context.embedded.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.ui.freemarker.SpringTemplateLoader;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
/**
* @author Dave Syer
* @author Roy Clarkson
*/
@SuppressWarnings("deprecation")
@Configuration
public class HystrixDashboardConfiguration {
private static final String DEFAULT_TEMPLATE_LOADER_PATH = "classpath:/templates/";
private static final String DEFAULT_CHARSET = "UTF-8";
/**
* Overrides Spring Boot's {@link FreeMarkerAutoConfiguration} to prefer using a
* {@link SpringTemplateLoader} instead of the file system. This corrects an issue
* where Spring Boot may use an empty 'templates' file resource to resolve templates
* instead of the packaged Hystrix classpath templates.
* @return FreeMarker configuration
*/
@Bean
public FreeMarkerConfigurer freeMarkerConfigurer() {
FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
configurer.setTemplateLoaderPaths(DEFAULT_TEMPLATE_LOADER_PATH);
configurer.setDefaultEncoding(DEFAULT_CHARSET);
configurer.setPreferFileSystemAccess(false);
return configurer;
}
@Bean
public ServletRegistrationBean proxyStreamServlet() {
return new ServletRegistrationBean(new ProxyStreamServlet(), "/proxy.stream");

View File

@@ -0,0 +1 @@
The presence of this templates directory tests the Spring Boot FreeMarker configuration