【SpringBoot】SpringBoot使用thymeleaf模板引擎

按照http://blog.csdn.net/u012706811/article/details/52185345裏的方法配置thymeleaf,啓動時出現下列異常

Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'viewResolver' defined in class path resource [org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class]: Initialization of bean failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration$Thymeleaf3Configuration$Thymeleaf3ViewResolverConfiguration': Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration$ThymeleafDefaultConfiguration': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'defaultTemplateResolver' defined in class path resource [org/springframework/boot/autoconfigure/thymeleaf/ThymeleafAutoConfiguration$Thymeleaf3Configuration$DefaultTemplateResolverConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver]: Factory method 'defaultTemplateResolver' threw exception; nested exception is java.lang.NoSuchMethodError: org.thymeleaf.templateresolver.TemplateResolver.checkNotInitialized()V

後來在官方文檔中看到

By default, spring-boot-starter-thymeleaf uses Thymeleaf 2.1. If you
are using the spring-boot-starter-parent, you can use Thymeleaf 3 by
overriding the thymeleaf.version and thymeleaf-layout-dialect.version
properties, for example:

    <thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
    <thymeleaf-layout-dialect.version>2.1.1</thymeleaf-layout-dialect.version>
</properties> ```

if you are managing dependencies yourself, look at
spring-boot-dependencies for the list of artifacts that are related to
those two versions. To avoid a warning message about the HTML 5
template mode being deprecated and the HTML template mode being used
instead, you may also want to explicitly configure
spring.thymeleaf.mode to be HTML, for example:

`spring.thymeleaf.mode: HTML` 

Please refer to the Thymeleaf 3 sample to
see this in action.

If you are using any of the other auto-configured Thymeleaf Extras
(Spring Security, Data Attribute, or Java 8 Time) you should also
override each of their versions to one that is compatible with
Thymeleaf 3.0. 

意思是可以在maven中配置Thymeleaf 版本,由於不知道什麼原因導致的錯誤,於是嘗試了一下改變Thymeleaf 的版本,也就是在pom.xml文件中<properties></properties>標籤內添加一下配置

<thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
<thymeleaf-layout-dialect.version>2.1.1</thymeleaf-layout-dialect.version>

再次啓動果然有效果,因此可以猜測應該是因爲spring-boot-starter-thymeleaf默認使用 Thymeleaf 2.1,而當前SpringBoot版本(我的是1.5.2)不支持該版本的Thymeleaf,手動修改爲Thymeleaf 3.0.2的版本。
事實上開頭的鏈接的末尾已經寫了更改版本號,當時沒注意。

PS:經過了n次的報錯查了半天找不出解決辦法,總結出異常無論如何都解決不了時考慮依賴的版本問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章