现象:
Springboot + Thymeleaf2,用java -jar正常,用mvn spring-boot:run启动则找不到模板文件。
异常如下:
org.thymeleaf.exceptions.TemplateInputException: Error resolving template "index", template might not exist or might not be accessible by any of the configured Template Resolvers
解决方案:
@Bean public TemplateResolver templateResolver() { TemplateResolver tr = new ClassLoaderTemplateResolver(); tr.setPrefix("templates/"); // 注意template/前面没有"/",也不要加"classpath:", // 否则如果用mvn启动会找不到模板(通过目录读class找不到,通过读jar可找到,即用java -jar正常) tr.setSuffix(".html"); tr.setTemplateMode("HTML5"); tr.setOrder(0); return tr; }
分析:
如果TemplateResolver的Prefix跟网上很多贴写的设置成:"classpath:/templates/"或"classthpath:templates/",都没用。
经分析,是ClassLoaderResourceResolver最后会调用java的ClassLoader.getResourceAsStream(),但传进去的资料地址就是TemplateResolver拼凑出来的,比如“classpath:/templates”,这种写法在读取jar包时是没问题的,但在读文件目录下的class时就会有问题。正确做法是TemplateResolver设置Prefix时,不要加“classpath:”前缀,也不要在最前面加“/”。
P.S.
用mvn spring-boot:run启动springboot项目时,系统是直接读target/classes目录下的class的。

356

被折叠的 条评论
为什么被折叠?



