spring-boot項(xiàng)目在外部tomcat環(huán)境下部署遇到的問(wèn)題

spring-boot默認(rèn)提供內(nèi)嵌的tomcat,所以打包直接生成jar包盖袭,用java -jar命令就可以啟動(dòng)。但是遥金,有時(shí)候我們更希望一個(gè)tomcat來(lái)管理多個(gè)項(xiàng)目,這種情況下就需要項(xiàng)目是war格式的包而不是jar格式的包蒜田。spring-boot同樣提供了解決方案稿械,只需要簡(jiǎn)單的幾步更改就可以了,這里提供maven項(xiàng)目的解決方法:

1.將項(xiàng)目的啟動(dòng)類(lèi)Application.java繼承SpringBootServletInitializer并重寫(xiě)configure方法

@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.在pom.xml文件中物邑,project下面增加package標(biāo)簽

<packaging>war</packaging>

3.還是在pom.xml文件中溜哮,dependencies下面添加

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>

這樣,只需要以上3步就可以打包成war包色解,并且部署到tomcat中了茂嗓。需要注意的是這樣部署的request url需要在端口后加上項(xiàng)目的名字才能正常訪問(wèn)。spring-boot更加強(qiáng)大的一點(diǎn)就是:即便項(xiàng)目是以上配置科阎,依然可以用內(nèi)嵌的tomcat來(lái)調(diào)試述吸,啟動(dòng)命令和以前沒(méi)變,還是:mvn spring-boot:run锣笨。

如果需要在springboot中加上request前綴蝌矛,需要在application.properties中添加server.contextPath=/prefix/即可。其中prefix為前綴名错英。這個(gè)前綴會(huì)在war包中失效入撒,取而代之的是war包名稱(chēng),如果war包名稱(chēng)和prefix相同的話椭岩,那么調(diào)試環(huán)境和正式部署環(huán)境就是一個(gè)request地址了茅逮。

到這一步都參考:http://blog.csdn.net/james_wade63/article/details/51009423

一般這樣配置都不會(huì)出現(xiàn)問(wèn)題,但有些時(shí)候判哥,還是會(huì)報(bào)錯(cuò)献雅,那是因?yàn)閠omcat運(yùn)行版本不同:

例如我在tomcat8.0.30版本下,配置如下:

<!-- 打war包時(shí)加入此項(xiàng)塌计, 告訴spring-boot tomcat相關(guān)jar包用外部的挺身,不要打進(jìn)去 -->
  <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-tomcat -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>1.4.0.RELEASE</version>
<scope>provided</scope>
</dependency>

這樣配置在外部tomcat是8.0.30版本下正常運(yùn)行,但是我的服務(wù)器是7.0.69就會(huì)報(bào)錯(cuò):

org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/zhaolixiang]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:153)
    at org.apache.catalina.core.StandardContext.reload(StandardContext.java:4088)
    at org.apache.catalina.startup.HostConfig.reload(HostConfig.java:1539)
    at org.apache.catalina.startup.HostConfig.checkResources(HostConfig.java:1512)
    at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1748)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:333)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1371)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1543)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1553)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1521)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext
    at org.springframework.boot.context.web.SpringBootServletInitializer.createSpringApplicationBuilder(SpringBootServletInitializer.java:140)
    at org.springframework.boot.context.web.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:104)
    at org.springframework.boot.context.web.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:85)
    at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:175)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5573)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
    ... 12 more
Caused by: java.lang.ClassNotFoundException: org.springframework.context.ApplicationContext
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1858)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1701)
    ... 18 more

解決版本锌仅,修改代碼:

<!-- 打war包時(shí)加入此項(xiàng)章钾, 告訴spring-boot tomcat相關(guān)jar包用外部的,不要打進(jìn)去 -->
  <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-tomcat -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>1.3.0.RELEASE</version>
<scope>provided</scope>
</dependency>

就成功了H惹邸伍玖!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市剿吻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌串纺,老刑警劉巖丽旅,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件椰棘,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡榄笙,警方通過(guò)查閱死者的電腦和手機(jī)邪狞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)茅撞,“玉大人帆卓,你說(shuō)我怎么就攤上這事∶浊穑” “怎么了剑令?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)拄查。 經(jīng)常有香客問(wèn)我吁津,道長(zhǎng),這世上最難降的妖魔是什么堕扶? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任碍脏,我火速辦了婚禮,結(jié)果婚禮上稍算,老公的妹妹穿的比我還像新娘典尾。我一直安慰自己,他們只是感情好糊探,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布钾埂。 她就那樣靜靜地躺著,像睡著了一般侧到。 火紅的嫁衣襯著肌膚如雪勃教。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,328評(píng)論 1 310
  • 那天匠抗,我揣著相機(jī)與錄音故源,去河邊找鬼。 笑死汞贸,一個(gè)胖子當(dāng)著我的面吹牛绳军,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播矢腻,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼门驾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了多柑?” 一聲冷哼從身側(cè)響起奶是,我...
    開(kāi)封第一講書(shū)人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后聂沙,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體秆麸,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年及汉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了沮趣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡坷随,死狀恐怖房铭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情温眉,我是刑警寧澤缸匪,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站芍殖,受9級(jí)特大地震影響豪嗽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜豌骏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一龟梦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧窃躲,春花似錦计贰、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至洒琢,卻和暖如春秧秉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背衰抑。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工象迎, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人呛踊。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓砾淌,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親谭网。 傳聞我的和親對(duì)象是個(gè)殘疾皇子汪厨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容