最近开发当中需要在SpringBoot配置多个不同Thymeleaf位置,特此记录下相关过程
默认Thymeleaf配置
当我们集成thymeleaf后,会有一个默认的配置信息,可以在配置文件当中配置默认的信息,修改路径,前后缀等等参数
spring:thymeleaf:prefix: classpath:/templates/mode: HTMLcache: truecheck-template: trueencoding: UTF-8suffix: .htmltemplate-resolver-order:
具体实现则是通过ThymeleafAutoConfiguration类中进行的自动配置
@BeanSpringResourceTemplateResolver defaultTemplateResolver() {SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();resolver.setApplicationContext(this.applicationContext);resolver.setPrefix(this.properties.getPrefix());resolver.setSuffix(this.properties.getSuffix());resolver.setTemplateMode(this.properties.getMode());if (this.properties.getEncoding() != null) {resolver.setCharacterEncoding(this.properties.getEncoding().name());}resolver.setCacheable(this.properties.isCache());Integer order = this.properties.getTemplateResolverOrder();if (order != null) {resolver.setOrder(order);}resolver.setCheckExistence(this.properties.isCheckTemplate());return resolver;}
配置多个thymeleaf模板位置
由于默认配置只能设置一个thymeleaf模板位置,所以当需要配置多个模板位置的时候就需要自行定义模板解析即可
@Configuration
public class ThymeleafConfig {/*** 这里重写默认的解析配置*/@Beanpublic SpringResourceTemplateResolver defaultTemplateResolver(){SpringResourceTemplateResolver springResourceTemplateResolver = new SpringResourceTemplateResolver();springResourceTemplateResolver.setOrder(1); //解析匹配优先级 从1开始进行匹配springResourceTemplateResolver.setCacheable(false); //是否缓存springResourceTemplateResolver.setTemplateMode(TemplateMode.HTML); //模板类型springResourceTemplateResolver.setSuffix(".html"); //匹配后缀springResourceTemplateResolver.setPrefix("classpath: /theme/"); //匹配前缀springResourceTemplateResolver.setCharacterEncoding("UTF-8"); //文件编码springResourceTemplateResolver.setCheckExistence(true); //匹配前是否检查文件是否存在 如果需要存在多个TemplateResolver解析器 这里需要设置成true 不然不会进入到后面的解析器return springResourceTemplateResolver;}/*** 这里写第二个解析配置*/@Beanpublic SpringResourceTemplateResolver springResourceTemplateResolver(){SpringResourceTemplateResolver springResourceTemplateResolver = new SpringResourceTemplateResolver();springResourceTemplateResolver.setOrder(2);springResourceTemplateResolver.setCacheable(false);springResourceTemplateResolver.setTemplateMode(TemplateMode.HTML);springResourceTemplateResolver.setSuffix(".html");springResourceTemplateResolver.setPrefix("file: d:/test/");springResourceTemplateResolver.setCharacterEncoding("UTF-8");springResourceTemplateResolver.setCheckExistence(false); //最后一个解析器需要设置为falsereturn springResourceTemplateResolver;}
}
注意事项
- ClassLoaderTemplateResolver,FileTemplateResolver,UrlTemplateResolver,SpringResourceTemplateResolver 这四个解析器都可以解析thymeleaf模板,不过根据名称就能知道什么情况下使用什么解析器,就不详细说明了。
- defaultTemplateResolver 是否一定要重写?不一定,如果不重写也没关系只是还能解析到默认配置而已
- order和checkExistence,如果前一个order的TemplateResolver设置checkExistence为false,后续order的TemplateResolver将无法正常解析。