Spring Boot使用Thymeleaf + Gradle構(gòu)建war到Tomcat
Spring Boot 以Jar的方式部署啟動(dòng),這個(gè)不用介紹了, 之前也介紹了關(guān)于 Spring Boot + thymeleaf 的簡(jiǎn)單使用 ,但是今天遇到一個(gè)問(wèn)題, 我先描述下問(wèn)題的場(chǎng)景:
由于運(yùn)維部門的需求,項(xiàng)目需要以war的形式放到tomcat運(yùn)行 ,而不是原定的jar的方式運(yùn)行
配置了一下午,也查了一下午的資料,以war的方式在Tomcat能運(yùn)行,并且能訪問(wèn)Controller,但是在返回html視圖時(shí),找不到視圖模板。最終發(fā)現(xiàn)問(wèn)題在Thymeleaf的配置,話不多說(shuō),具體看操作步驟:
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 打包方式配置
下一步是更新你的構(gòu)建配置,這樣你的項(xiàng)目將產(chǎn)生一個(gè)war包而不是jar包。如果你使用Maven,并使用spring-boot-starter-parent(為了配置Maven的war插件),所有你需要做的就是更改pom.xml的packaging為war:
<packaging>war</packaging>
如果你使用Gradle,你需要修改build.gradle來(lái)將war插件應(yīng)用到項(xiàng)目上:
apply plugin: 'war'
3、確保內(nèi)嵌的servlet容器不能干擾war包將部署的servlet容器
為了達(dá)到這個(gè)目的,你需要將內(nèi)嵌容器的依賴標(biāo)記為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的時(shí)候就會(huì)打成war包,這里可能還需要注意一個(gè)編碼的問(wèn)題,這個(gè)就大家自己去找了,具體詳情參照:Spring 源碼
配置好這些,確實(shí)能在Tomcat啟動(dòng)了,但是對(duì)于Controller返回頁(yè)面視圖,卻還不夠,還需要配置模板的參數(shù),這里我使用的是Thymeleaf ,所以就介紹Thymeleaf 的配置方式
4、Thymeleaf 的配置
如果你是用的.properties方式配置的 參數(shù),那么只需要在你的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
每一個(gè)配置項(xiàng)的具體意思就自己去查了,這里不細(xì)說(shuō), 如果你是用.yml的方式進(jìn)行配置項(xiàng)的話,那么需要在application.yml里面配置如下參數(shù):
spring: thymeleaf: cache: false check-template-location: true prefix: classpath:/templates/ suffix: .html mode: HTML5 encoding: UTF-8 content-type: text/html
其實(shí)重要的就是prefix,因?yàn)榉诺?code>tomcat里面之后, Thymeleaf 就找不到默認(rèn)的templates 模板路徑了,所以這里需要重新指明一下,這個(gè)問(wèn)題也困擾了我一下午加一晚上,剛剛才調(diào)完, 現(xiàn)在記錄下,后人謹(jǐn)記?。?/p>
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
- eclipse springboot工程打war包方法及再Tomcat中運(yùn)行的方法
- spring boot項(xiàng)目打包成war在tomcat運(yùn)行的全步驟
- SpringBoot應(yīng)用War包形式部署到外部Tomcat的方法
- SpringBoot war包部署到Tomcat服務(wù)器
- Spring Boot Gradle發(fā)布war到tomcat的方法示例
- Springboot打成war包并在tomcat中運(yùn)行的部署方法
- springboot項(xiàng)目打成war包部署到tomcat遇到的一些問(wèn)題
- springboot使用war包部署到外部tomcat過(guò)程解析
相關(guān)文章
java發(fā)送javax.mail郵件實(shí)例講解
這篇文章主要為大家介紹了java發(fā)送javax.mail郵件實(shí)例講解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-01-01
SpringBoot?thymeleaf實(shí)現(xiàn)餅狀圖與柱形圖流程介紹
這篇文章主要介紹了SpringBoot?thymeleaf實(shí)現(xiàn)餅狀圖與柱形圖流程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-12-12
Java利用iTextPDF庫(kù)實(shí)現(xiàn)制作PDF表格模板并填充數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了如何通過(guò)Java的iTextPDF庫(kù)制作一個(gè)PDF表格模板并填充數(shù)據(jù),文中的示例代碼講解詳細(xì),感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧2023-12-12
Java中ArrayList與順序表的定義與實(shí)現(xiàn)方法
ArrayList是一個(gè)實(shí)現(xiàn)List接口的類,底層是動(dòng)態(tài)類型順序表,本質(zhì)也就是數(shù)組,動(dòng)態(tài)主要體現(xiàn)在它的擴(kuò)容機(jī)制,下面這篇文章主要給大家介紹了關(guān)于Java中ArrayList與順序表的定義與實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2022-07-07
啟動(dòng)SpringBoot報(bào)錯(cuò)Input length = 1問(wèn)題及解決
這篇文章主要介紹了啟動(dòng)SpringBoot報(bào)錯(cuò)Input length = 1問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05
spring security 5.x實(shí)現(xiàn)兼容多種密碼的加密方式
spring security針對(duì)該功能有兩種實(shí)現(xiàn)方式,一種是簡(jiǎn)單的使用加密來(lái)保證基于 cookie 的 token 的安全,另一種是通過(guò)數(shù)據(jù)庫(kù)或其它持久化存儲(chǔ)機(jī)制來(lái)保存生成的 token。這篇文章主要給大家介紹了關(guān)于spring security 5.x實(shí)現(xiàn)兼容多種密碼的加密方式,需要的朋友可以參考下。2018-01-01

