查詢Springboot項目打war包的方法,在網上有很多,但是主要的思路都是将springboot中内置的tomcat去掉,重寫啟動主方法,多查查總有一款是适合你的,我就是查了大概一周!!!困惑了一周!!!!也看到許多人問也是按照網上的方法去設定依賴,重寫方法,為什麼不好用呢,我剛開始也是這樣,但是我建立了一個小的springboot項目去試了一下網上的方法,是可以使用,下面寫出需要更改的地方。
去掉内置的tomcat,有兩個方法:
方法一、這個親測好用
<packaging>war</packaging>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
方法二、這個我沒有試驗
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!– 移除嵌入式tomcat插件 –>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
因為springboot是沒有web.xml檔案的,是以需要一下設定。你也可以試試給springboot添加web.xml。
<build>
<finalName>learnspringboot</finalName>
<!--打包後war包的名稱-->
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<!--如果想在沒有web.xml檔案的情況下建構WAR,請設定為false。-->
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
下面重寫啟動類:
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(DemoApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
以上就可以将springboot項目進行打war包部署到tomcat中,但這個時候我自己的問題并沒有解決,我出現了很多小夥伴說的項目部署到tomcat中可以啟動,沒有任何錯誤,但是啟動報錯404,空白頁,通路不了等等,我的問題是這麼解決的,我是通路路徑問題,我的資料庫連接配接隻能識别/login,但是war包通路需要加上war包名稱,比如http://localhost:8080/learnspringboot/login,這樣我自己的攔截器在識别路徑的時候識别的是/learnspringboot/login,那就找不到登入資訊,就會跳到/error界面,問題分析原因都是通過對比tomcai啟動war的背景日志與在idea中啟動springboot的背景日志,以及代碼發現的。是以我隻要讓我通路的路徑是http://localhost:8080/login 那麼就是通路不需要加war名稱,那麼就在tomcat的server.xml中進行設定。
我的是這麼設定,可能跟網上的不太一樣,我不太懂差別,但是我自己的我用着好用哈。
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context docBase="/learnspringboot" path="" reloadable="true" crossContext="true"/>
<!-- 上面這段是我插入标簽 docBase是war包名稱-->
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
然後我的就可以通路成功,如果大家遇到相似的問題,大家一定要耐心看差別,因為網上查的部署方法,是有好用的,可能你的項目本身建設影響了你的通路,如果對大家有幫助那就太好了,因為我在這憋了太久了,如果有不對請指出,本人也隻是個新手,本文也是參考了好多大神的文章。。。