FreeMarkerConfigurer : Cannot resolve template loader path [classpath:/templates/] to [java.io.File]: using SpringTemplateLoader as fallback
general java 2015. 5. 18. 20:12spring boot/loaded 테스트하다가 다음과 같은 java.io.FileNotFoundException : FreeMarkerConfigurer이 발생했다. 실행이 되길래, ERROR인 줄 알았는데, DEBUG 이다.
절대 경로에서 해당 파일이 없어서 Exception이 발생했고, 대비책(fallback)으로 spring classpath에서 파일을 읽은 것이다.
따라서 절대로 에러가 아니다!!
사실 Exception 을 wrap 해서 간단히 보여줘도 될 것을.. exception을 다 stack으로 출력했나 싶긴하다..
2015-05-18 18:01:23.618 DEBUG 52607 --- [ main] o.s.w.s.v.f.FreeMarkerConfigurer : Cannot resolve template loader path [classpath:/templates/] to [java.io.File]: using SpringTemplateLoader as fallback
java.io.FileNotFoundException: class path resource [templates/] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/mydev/location-lab/target/google-location-lab-0.0.1-SNAPSHOT.jar!/templates/
at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:212)
at org.springframework.core.io.AbstractFileResolvingResource.getFile(AbstractFileResolvingResource.java:52)
at org.springframework.ui.freemarker.FreeMarkerConfigurationFactory.getTemplateLoaderForPath(FreeMarkerConfigurationFactory.java:342)
at org.springframework.ui.freemarker.FreeMarkerConfigurationFactory.createConfiguration(FreeMarkerConfigurationFactory.java:290)
at org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer.afterPropertiesSet(FreeMarkerConfigurer.java:116)
소스를 보면, debug일 때에만 발생하도록 되어 있다.
/**
* Determine a FreeMarker TemplateLoader for the given path.
* <p>Default implementation creates either a FileTemplateLoader or
* a SpringTemplateLoader.
* @param templateLoaderPath the path to load templates from
* @return an appropriate TemplateLoader
* @see freemarker.cache.FileTemplateLoader
* @see SpringTemplateLoader
*/
protected TemplateLoader getTemplateLoaderForPath(String templateLoaderPath) {
if (isPreferFileSystemAccess()) {
// Try to load via the file system, fall back to SpringTemplateLoader
// (for hot detection of template changes, if possible).
try {
Resource path = getResourceLoader().getResource(templateLoaderPath);
File file = path.getFile(); // will fail if not resolvable in the file system
if (logger.isDebugEnabled()) {
logger.debug(
"Template loader path [" + path + "] resolved to file path [" + file.getAbsolutePath() + "]");
}
return new FileTemplateLoader(file);
}
catch (IOException ex) {
if (logger.isDebugEnabled()) {
logger.debug("Cannot resolve template loader path [" + templateLoaderPath +
"] to [java.io.File]: using SpringTemplateLoader as fallback", ex);
}
return new SpringTemplateLoader(getResourceLoader(), templateLoaderPath);
}
}
else {
// Always load via SpringTemplateLoader (without hot detection of template changes).
logger.debug("File system access not preferred: using SpringTemplateLoader");
return new SpringTemplateLoader(getResourceLoader(), templateLoaderPath);
} }
<logger name="org.springframework.web" level="INFO"/>
'general java' 카테고리의 다른 글
[Spring Boot] @SpringBootApplication (0) | 2015.05.18 |
---|---|
spring boot/loaded 애플리케이션 배포 방법 (0) | 2015.05.18 |
[Spring] RestTemplate 일반 웹 서버 통신 예제 (0) | 2015.05.15 |
[Spring] RestTemplate utf8 json 예제 (0) | 2015.05.15 |
[spring boot] Intellij 14.1 지원 (0) | 2015.05.13 |