springboot學(xué)習(xí)之jar和war

大家都知道springboot給我們提供jar和war兩種打包方式。雖然他們倆者之間可以很輕松的進(jìn)行轉(zhuǎn)換,但可能很多人也會(huì)像我一樣會(huì)糾結(jié)那在什么情況下使用war亿扁,在什么情況下使用jar熙尉?還請(qǐng)看官老爺們指點(diǎn)。

ps:文章中代碼經(jīng)過(guò)簡(jiǎn)略,因此適用于對(duì)springboot有過(guò)相關(guān)開(kāi)發(fā)或?qū)W習(xí)經(jīng)驗(yàn)的朋友們驶沼。

jar

要打包成jar包我們需要經(jīng)過(guò)下面幾步:

1. pom文件中設(shè)置
<!-- 告訴sprinboot我們希望以什么方式進(jìn)行打包-->
<packaging>jar</packaging>
...
<!-- 在bulid中設(shè)置  這樣可以指定打包名稱,有時(shí)候我們不希望包名中不包含版本號(hào)-->
<finalName>aggregation</finalName>

2. Application.java中設(shè)置
public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
3. 打包
clean package

這時(shí)會(huì)在項(xiàng)目根目錄下生成一個(gè)target包争群,我們的jar包就在該文件夾下回怜。

springboot打包成的jar和普通jar包是有一定區(qū)別的。這是一個(gè)可運(yùn)行的jar包换薄。這樣我們可以直接通過(guò)java -jar 來(lái)直接運(yùn)行這個(gè)jar包玉雾。

我們先來(lái)看下springboot打成jar包后的結(jié)構(gòu)和內(nèi)容:

springboot項(xiàng)目打包的jar

普通jar:

傳統(tǒng)jar

通過(guò)上面兩個(gè)圖的對(duì)比,我們知道這個(gè)JAR包與傳統(tǒng)JAR包的不同之處在于里面有一個(gè)名為lib的目錄轻要,在這個(gè)目錄中包含了這個(gè)簡(jiǎn)單應(yīng)用所依賴的其他JAR包复旬,其中也包含內(nèi)置的嵌 入式Tomcat,正是使用它冲泥,才能發(fā)布服務(wù)和訪問(wèn)Web資源驹碍。除了我們編寫(xiě)的源碼所編譯形成的CLASS以外,在org目錄下還有許多Spring所提 供的CLASS凡恍,正是依賴這些CLASS志秃,才能夠加載位于lib目錄下JAR中的類(lèi)。這樣的加載機(jī)制與在OSGi bundle中聲明Bundle-Classpath很類(lèi)似嚼酝,不過(guò)在OSGi中會(huì)由容器來(lái)負(fù)責(zé)加載指定路徑下的類(lèi)洽损。這大致闡述了這樣一個(gè)JAR包能夠發(fā)布服務(wù)的原因。

war

要打包成war包我們需要經(jīng)過(guò)以下幾步:

1. pom文件中設(shè)置
<!-- 告訴sprinboot我們希望以什么方式進(jìn)行打包-->
<packaging>war</packaging>
...
<!-- 移除內(nèi)嵌的tomcat模塊革半,但是為了我們?cè)诒緳C(jī)測(cè)試方便碑定,我們還需要引入它,所以配置如下-->
  <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>  
<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-tomcat</artifactId>  
    <scope>provided</scope>  
</dependency>  
<!-- 當(dāng)然我們也可以使用Undertow -->

...
<!-- 我們始終是運(yùn)行在severlet容器中的又官,我們知道tomcat中已經(jīng)有了servlet的依賴延刘,但是上面已經(jīng)在打包的時(shí)候移出了那么我們需要設(shè)置-->
 <dependency>  
<groupId>org.apache.tomcat</groupId>  
<artifactId>tomcat-servlet-api</artifactId>  
<version>7.0.42</version>  
<scope>provided</scope>  
</dependency>  
...
<!-- 添加war插件,用來(lái)自定義打包以后的war包的名稱-->

 <plugin>  
<groupId>org.apache.maven.plugins</groupId>  
<artifactId>maven-war-plugin</artifactId>  
<configuration>  
    <warSourceExcludes>src/main/resources/**</warSourceExcludes>  
    <warName>springBoot</warName>  
</configuration>  
</plugin>  

上面說(shuō)到的Undertow六敬,大家有興趣可以去研究下碘赖,我這里附上一個(gè)springboot大神的文章Spring Boot 容器選擇 Undertow 而不是 Tomcat

2. Application.java中設(shè)置

修改入口方法 繼承一個(gè)SpringBootServletInitializer類(lèi),并且覆蓋configure方法

@SpringBootApplication  
@EnableCaching  
public class SpringDataJpaExampleApplication extends SpringBootServletInitializer {  
  
    @Override  
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {  
        return application.sources(SpringDataJpaExampleApplication.class);  
    }  
  
    public static void main(String[] args) {  
        SpringApplication.run(SpringDataJpaExampleApplication.class, args);  
    }  
}  
3. 打包
clean package

說(shuō)完打包我們來(lái)說(shuō)下一個(gè)話題:

運(yùn)行

  1. 如果我們是jar包外构,我們可以直接通過(guò)java -jar 來(lái)運(yùn)行 普泡。這種方式如果是在系統(tǒng)中關(guān)閉了控制臺(tái)也就停止該Java進(jìn)程。
    在linux的生產(chǎn)系統(tǒng)中我們不希望是上面的結(jié)果审编,我們可以通過(guò)下面的方式運(yùn)行:
 nohup java -jar springboot.jar --server.port=port &

另外我還有一篇使用dokcer的文章撼班,也說(shuō)到了怎么來(lái)運(yùn)行和啟動(dòng)它
springboot學(xué)習(xí)記錄之集成docker并發(fā)布到阿里云服務(wù)

  1. 如果是war包,我們可以將其放到我們常用的web容器tomcat的webapps目錄下垒酬,然后啟動(dòng)tomcat

通過(guò)tomcat我們可以很方便的設(shè)置jvm砰嘁、運(yùn)行線程等等件炉。還可以將多個(gè)應(yīng)用映射到同一個(gè)端口上。

選擇

好了說(shuō)了那么多矮湘,我們首先知道斟冕,哪怕是jar它也是像war一樣,運(yùn)行在容器中來(lái)發(fā)布服務(wù)的缅阳。
再來(lái)說(shuō)下今天的終極目的:jar和war的取舍磕蛇。
到底是jar好?還是war好十办?

我目前認(rèn)為jar包在集群或者做一些優(yōu)化的話秀撇,沒(méi)有war包方便。
而如果很簡(jiǎn)單的應(yīng)用的話jar包卻不會(huì)像war包一樣一定要找web容器運(yùn)行那樣復(fù)雜橘洞。

還望賜教捌袜!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末说搅,一起剝皮案震驚了整個(gè)濱河市炸枣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌弄唧,老刑警劉巖适肠,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異候引,居然都是意外死亡侯养,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)澄干,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)逛揩,“玉大人,你說(shuō)我怎么就攤上這事麸俘”缁” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵从媚,是天一觀的道長(zhǎng)逞泄。 經(jīng)常有香客問(wèn)我,道長(zhǎng)拜效,這世上最難降的妖魔是什么喷众? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮紧憾,結(jié)果婚禮上到千,老公的妹妹穿的比我還像新娘。我一直安慰自己赴穗,他們只是感情好父阻,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布愈涩。 她就那樣靜靜地躺著,像睡著了一般加矛。 火紅的嫁衣襯著肌膚如雪履婉。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,573評(píng)論 1 305
  • 那天斟览,我揣著相機(jī)與錄音毁腿,去河邊找鬼。 笑死苛茂,一個(gè)胖子當(dāng)著我的面吹牛已烤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播妓羊,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼胯究,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了躁绸?” 一聲冷哼從身側(cè)響起裕循,我...
    開(kāi)封第一講書(shū)人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎净刮,沒(méi)想到半個(gè)月后剥哑,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡淹父,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年株婴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暑认。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡困介,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蘸际,到底是詐尸還是另有隱情座哩,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布捡鱼,位于F島的核電站八回,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏驾诈。R本人自食惡果不足惜缠诅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望乍迄。 院中可真熱鬧管引,春花似錦、人聲如沸闯两。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至重慢,卻和暖如春饥臂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背似踱。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工隅熙, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人核芽。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓囚戚,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親轧简。 傳聞我的和親對(duì)象是個(gè)殘疾皇子驰坊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

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

  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,811評(píng)論 6 342
  • 摘要 看完本文你將掌握如下知識(shí)點(diǎn): 如何搭建一個(gè)SpringBoot項(xiàng)目 SpringBoot自動(dòng)配置原理 Spr...
    飄逸峰閱讀 7,142評(píng)論 1 41
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)哮独,斷路器拳芙,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 前言:學(xué)習(xí)SpringBoot不應(yīng)該直接就是開(kāi)始使用SpringBoot,如果直接拿來(lái)用肯定會(huì)有很多人不是很明白特...
    CoderZS閱讀 74,793評(píng)論 10 217
  • 任何一顆心靈的成熟,都必須經(jīng)過(guò)寂寞的洗禮和孤獨(dú)的磨煉借嗽。世上最糟糕的感受态鳖,就是不得不懷疑先前深信不疑的東西转培。
    昨別今閱讀 173評(píng)論 1 1