我们都知道springboot的模板文件默认是在 classpath:templates/ 下面并且以.html结尾,但当在生产环境中我们需要动态的修改或替换某些模板文件时这样就不满足了,
这时就需要自定义一个TemplateResolver来解析我们的模板文件了,具体实现如下:
方法一(推荐):
这种方式继承了之前默认的配置,如下这种设置只需把模板文件与可执行jar文件放于同一目录下的templates/下即可。
import org.springframework.boot.autoconfigure.thymeleaf.ThymeleafProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.thymeleaf.templateresolver.FileTemplateResolver;
import org.thymeleaf.templateresolver.TemplateResolver;
@Configuration
public class WebConfig {
@Bean
public TemplateResolver fileTemplateResolver(ThymeleafProperties properties) {
FileTemplateResolver resolver = new FileTemplateResolver();
resolver.setOrder(Ordered.HIGHEST_PRECEDENCE);
resolver.setCacheable(properties.isCache());
resolver.setSuffix(properties.getSuffix());
if (properties.getEncoding() != null) {
resolver.setCharacterEncoding(properties.getEncoding().name());
}
resolver.setTemplateMode(properties.getMode());
resolver.setPrefix("./templates/");
return resolver;
}
}
方法二:
如下这种设置只需要把模板文件与可执行jar文件位于同一目录即可。
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver; import org.thymeleaf.templateresolver.TemplateResolver; @Configuration public class WebConfig { @Bean public TemplateResolver fileTemplateResolver() { SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); resolver.setPrefix("file:"); resolver.setSuffix(".html"); resolver.setTemplateMode("HTML5"); // resolver.setOrder(Ordered.HIGHEST_PRECEDENCE); return resolver; } }
测试:
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping public class TestController { @GetMapping("/download") public String getIndex() { return "test"; } }
测试中使用相对目录./templates/
或 test.html
注意设置模本文件的内容不同。classpath
:/templates/test.html,
在浏览器访问 http://localhost:8080/download
观察输出加载内容及顺序。
经测试:模版加载顺序是自定义优先
获取模板解析器
// 注入自定义的模板解析器 @Autowired @Qualifier("fileTemplateResolver") TemplateResolver fileTemplateResolver; // 注入默认的模板解析器 @Autowired @Qualifier("defaultTemplateResolver") TemplateResolver defaultTemplateResolver;