我們都知道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;