本文是笔者通过自己学习过程中整理出来的笔记,如有漏洞和不足,请向我反馈。
笔者使用环境:
Java 1.8
SpringBoot 2.7.x
本文章将会讲述如何在SpringBoot环境下配置多个Thymeleaf视图解析器。
最终实现效果: 可以从多个位置读取Thymeleaf模板。
模拟业务场景: 项目主代码在resources/templates
下,无需随时修改,部分页面代码需要随时修改,则需要放到外部,与项目主代码分开,放在与项目jar文件同级的pages
文件夹下。
SpringBoot项目环境配置就不在此文章配置了,直接进入正文:
创建一个配置类,一般都在config包里创建,名字都可以,我这里用TemplateResolverConfiguration
@Configuration
public class TemplateResolverConfiguration {
@Bean
public SpringResourceTemplateResolver templateResolver() {
SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
//设置第一个解析器的prefix,也就是我们读取模板的目录,这里对应代码里的resources/templates目录
templateResolver.setPrefix("classpath:/templates/");
templateResolver.setSuffix(".html");
templateResolver.setCacheable(false);
templateResolver.setTemplateMode("HTML5");
templateResolver.setCharacterEncoding("UTF-8");
//设置模板解析器优先级,如果出现同名模板文件,按照优先级顺序来,0是最高优先级
templateResolver.setOrder(0);
//(必须)在源模板文件不在当前解析器的路径中时切换解析器,意思就是第一个解析器没找到文件,切换下一个解析器,直到找到了模板文件
templateResolver.setCheckExistence(true);
return templateResolver;
}
@Bean
public FileTemplateResolver secondTemplateResolver() {
FileTemplateResolver templateResolver = new FileTemplateResolver();
templateResolver.setPrefix("pages/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode(TemplateMode.HTML);
templateResolver.setCharacterEncoding("UTF-8");
templateResolver.setOrder(1);
templateResolver.setCheckExistence(true);
return templateResolver;
}
}
写完这个配置类,我们就能让Thymeleaf在多个位置读取模板了。