您好,登錄后才能下訂單哦!
Spring Boot 以Jar的方式部署啟動,這個不用介紹了, 之前也介紹了關于 Spring Boot + thymeleaf 的簡單使用 ,但是今天遇到一個問題, 我先描述下問題的場景:
由于運維部門的需求,項目需要以war
的形式放到tomcat
運行 ,而不是原定的jar
的方式運行
配置了一下午,也查了一下午的資料,以war
的方式在Tomcat
能運行,并且能訪問Controller
,但是在返回html視圖時,找不到視圖模板。最終發現問題在Thymeleaf
的配置,話不多說,具體看操作步驟:
1、Spring boot 容器配置需要繼承 SpringBootServletInitializer
這里我繼承的是web.suport
下面的SpringBootServletInitializer
。
@SpringBootApplication public class Application extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(Application.class); } public static void main(String[] args) throws Exception { SpringApplication.run(Application.class, args); } }
2、更新你的Maven or Gradle 打包方式配置
下一步是更新你的構建配置,這樣你的項目將產生一個war包而不是jar包。如果你使用Maven
,并使用spring-boot-starter-parent
(為了配置Maven的war插件),所有你需要做的就是更改pom.xml
的packaging
為war
:
<packaging>war</packaging>
如果你使用Gradle
,你需要修改build.gradle
來將war
插件應用到項目上:
apply plugin: 'war'
3、確保內嵌的servlet容器不能干擾war包將部署的servlet容器
為了達到這個目的,你需要將內嵌容器的依賴標記為provided
。
如果使用Maven
:
<dependencies> <!-- … --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <!-- … --> </dependencies>
如果使用Gradle
:
dependencies { // … providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' // … }
以上步驟配置好,maven or Gradle 在build
的時候就會打成war
包,這里可能還需要注意一個編碼的問題,這個就大家自己去找了,具體詳情參照:Spring 源碼
配置好這些,確實能在Tomcat
啟動了,但是對于Controller
返回頁面視圖,卻還不夠,還需要配置模板的參數,這里我使用的是Thymeleaf
,所以就介紹Thymeleaf
的配置方式
4、Thymeleaf 的配置
如果你是用的.properties
方式配置的 參數,那么只需要在你的application.properties
配置下面加上:
# THYMELEAF (ThymeleafAutoConfiguration) spring.thymeleaf.check-template-location=true spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html spring.thymeleaf.mode=HTML5 spring.thymeleaf.encoding=UTF-8 spring.thymeleaf.content-type=text/html spring.thymeleaf.cache=false
每一個配置項的具體意思就自己去查了,這里不細說, 如果你是用.yml
的方式進行配置項的話,那么需要在application.yml
里面配置如下參數:
spring: thymeleaf: cache: false check-template-location: true prefix: classpath:/templates/ suffix: .html mode: HTML5 encoding: UTF-8 content-type: text/html
其實重要的就是prefix
,因為放到tomcat
里面之后, Thymeleaf
就找不到默認的templates
模板路徑了,所以這里需要重新指明一下,這個問題也困擾了我一下午加一晚上,剛剛才調完, 現在記錄下,后人謹記!!
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對億速云的支持。如果你想了解更多相關內容請查看下面相關鏈接
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。