避免入坑!如何將SpringBoot成功項目部署在外部的tomcat裏面!【親測有效】

這裏口吐芬芳一句:操蛋!向服務器部署SpringBoot項目花了我整整一天時間..... 

我們都知道SpringBoot比較特殊,它自己內部已經集成了 Tomcat,它的打包方式也不再是傳統的war打包方式,它採用的是jar打包,然後放在服務器裏面直接使用命令運行就行,很大程度上便利了我們。但是一個很難受的事實時有些項目中的一些包可能會和內置tomcat發生衝突,比如達夢數據的驅動包。當項目中使用達夢數據時你就不能用內置tomcat,然後帶來的問題就是部署時會比較麻煩:

1.首先需要將打包方式改成war,pom文件如下

<name>stressCorrosion</name>

2.繼承SpringBootServletInitializer類,並重寫configure()方法

@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
		return application.sources(StressCorrosionApplication.class);
	}

3.去除內置的tomcat,pom文件如下(這一步可以不做,也能成功)

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<!--<exclusions>
				<exclusion>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-tomcat</artifactId>
				</exclusion>
			</exclusions>-->
</dependency>

然後你就可以打包部署了,打包可以使用idea中的打包方式(不贅述),也可以使用maven自帶的打包方式(推薦這種,不會自行百度)。

打包成功之後直接扔到tomcat目錄下面的webapps下面運行bin文件夾下的./startup.sh(Windows:./startup.bat),啓動運行成功,瀏覽器輸入localhost:8080。本以爲成功了,但是你會發現404,而且樣式全都會失效!但是你會發現當你加上包名:localhost:8080/demo,這時會訪問成功,但是你不可能一直手動輸入項目名吧,不切實際!

網上很多人的建議是給application.properties或application.yml文件中添加如下內容(這種方法同樣適用內置tomcat):

//如果是application.properties:

server.servlet.context-path = /demo  //demo爲你的項目名 

//如果是application.yml

server:
  servlet:
    context-path: /demo


這時候你再打包部署到tomcat時,可能有兩種情況:成功和繼續404!

我看到有人說對application.yml文件中添加上述內容同,將項目部署到外部tomcat時還是會失效。經過我自己的親身經歷來看:使用上述方法將項目部署到Windows下的Tomcat裏面時是有效地,部署之後能夠正常訪問(但此時地址欄並不會出現你指定的項目名,依然是controller裏面的路徑);但是將項目部署在Linux服務器中時上述方法就會失效(親測 ),但這時候也不是沒有辦法,我們可以修改tomcat的server.xml文件(在tomcat裏面的conf文件夾下面)中的<Host></Host>,我們可以向該節點中加入如下內容:

<Context path="" docBase="/項目路徑/項目名" debug="0" reloadable="true">

有了上述配置之後,重啓tomcat之後,輸入localhost:8080/之後就會出現你你自己的項目首頁,而且css,js文件加載一切正常。

這個問題整整困擾一整天,對於網上的大多數做法在部署到Windows裏面是可行的,但是在linux裏面就不太可行。我不知道是不是我個人問題,如果有大佬們採用向application.yml添加內容的這種方法並且成功部署到Linux服務器的,希望大佬不吝賜教~

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