Maven Spring boot項(xiàng)目學(xué)習(xí)筆記切換Jetty作為運(yùn)行容器并使用阿里maven鏡像源

摘錄網(wǎng)上一些Jetty相關(guān)的介紹便于快速了解Jetty。


Jetty 目前的是一個(gè)比較被看好的 Servlet 引擎荣赶,它的架構(gòu)比較簡(jiǎn)單慢逾,也是一個(gè)可擴(kuò)展性和非常靈活的應(yīng)用服務(wù)器,它有一個(gè)基本數(shù)據(jù)模型,這個(gè)數(shù)據(jù)模型就是 Handler,所有可以被擴(kuò)展的組件都可以作為一個(gè) Handler鹦聪,添加到 Server 中,Jetty 就是幫你管理這些 Handler。

Jetty 作為一個(gè)獨(dú)立的 Servlet 引擎可以獨(dú)立提供 Web 服務(wù)翠订,但是它也可以與其他 Web 應(yīng)用服務(wù)器集成,所以它可以提供基于兩種協(xié)議工作,一個(gè)是 HTTP嗤练,一個(gè)是 AJP 協(xié)議战坤。

如果將 Jetty 集成到 Jboss 或者 Apache,那么就可以讓 Jetty 基于 AJP 模式工作

Jetty 創(chuàng)建接受連接環(huán)境需要三個(gè)步驟:

創(chuàng)建一個(gè)隊(duì)列線程池玉掸,用于處理每個(gè)建立連接產(chǎn)生的任務(wù)脱吱,這個(gè)線程池可以由用戶來指定,這個(gè)和 Tomcat 是類似的憔足。

創(chuàng)建 ServerSocket郎哭,用于準(zhǔn)備接受客戶端的 socket 請(qǐng)求,以及客戶端用來包裝這個(gè) socket 的一些輔助類关筒。

創(chuàng)建一個(gè)或多個(gè)監(jiān)聽線程,用來監(jiān)聽訪問端口是否有連接進(jìn)來才写。

相比 Tomcat 創(chuàng)建建立連接的環(huán)境,Jetty 的邏輯更加簡(jiǎn)單,牽涉到的類更少嗤朴,執(zhí)行的代碼量也更少了瘾境。Jetty 的入口是 Server 類,Server 類啟動(dòng)完成了圣絮,就代表 Jetty 能為你提供服務(wù)了。它到底能提供哪些服務(wù)末盔,就要看 Server 類啟動(dòng)時(shí)都調(diào)用了哪些組件的 start 方法。

基于 AJP 工作

通常一個(gè) web 服務(wù)站點(diǎn)的后端服務(wù)器不是將 Java 的應(yīng)用服務(wù)器直接暴露給服務(wù)訪問者欣范,而是在應(yīng)用服務(wù)器颓鲜,如 Jboss 的前面在加一個(gè) web 服務(wù)器艾扮,如 Apache 或者 nginx,我想這個(gè)原因大家應(yīng)該很容易理解雕欺,如做日志分析撞蜂、負(fù)載均衡颁湖、權(quán)限控制吴侦、防止惡意請(qǐng)求以及靜態(tài)資源預(yù)加載等等听怕。

這種架構(gòu)下 servlet 引擎就不需要解析和封裝返回的 HTTP 協(xié)議很魂,因?yàn)?HTTP 協(xié)議的解析工作已經(jīng)在 Apache 或 Nginx 服務(wù)器上完成了帝蒿,Jboss 只要基于更加簡(jiǎn)單的 AJP 協(xié)議工作就行了胖替,這樣能加快請(qǐng)求的響應(yīng)速度敬拓。

在正常的企業(yè)級(jí)應(yīng)用中,Jetty 作為一個(gè) Servlet 引擎都是基于 AJP 協(xié)議工作的客年。

https://www.ibm.com/developerworks/cn/java/j-lo-jetty/

更多的介紹集成可以自己網(wǎng)上搜索。


與Tomcat的比較

Jetty更輕量級(jí)比藻。這是相對(duì)Tomcat而言的轩拨。?

單純比較 Tomcat 與 Jetty 的性能意義不是很大庶香,只能說在某種使用場(chǎng)景下赶掖,它表現(xiàn)的各有差異。因?yàn)樗鼈兠嫦虻氖褂脠?chǎng)景不盡相同。從架構(gòu)上來看 Tomcat 在處理少數(shù)非常繁忙的連接上更有優(yōu)勢(shì)牺堰,也就是說連接的生命周期如果短的話斧抱,Tomcat 的總體性能更高宪郊。

而 Jetty 剛好相反忙灼,Jetty 可以同時(shí)處理大量連接而且可以長(zhǎng)時(shí)間保持這些連接爬范。例如像一些 web 聊天應(yīng)用非常適合用 Jetty 做服務(wù)器父腕,像淘寶的 web 旺旺就是用 Jetty 作為 Servlet 引擎。

另外由于 Jetty 的架構(gòu)非常簡(jiǎn)單青瀑,作為服務(wù)器它可以按需加載組件璧亮,這樣不需要的組件可以去掉,這樣無形可以減少服務(wù)器本身的內(nèi)存開銷斥难,處理一次請(qǐng)求也是可以減少產(chǎn)生的臨時(shí)對(duì)象枝嘶,這樣性能也會(huì)提高。另外 Jetty 默認(rèn)使用的是 NIO 技術(shù)在處理 I/O 請(qǐng)求上更占優(yōu)勢(shì)哑诊,Tomcat 默認(rèn)使用的是 BIO群扶,在處理靜態(tài)資源時(shí),Tomcat 的性能不如 Jetty。

作為一個(gè)標(biāo)準(zhǔn)的 Servlet 引擎竞阐,它們都支持標(biāo)準(zhǔn)的 Servlet 規(guī)范缴饭,還有 Java EE 的規(guī)范也都支持,由于 Tomcat 的使用的更加廣泛骆莹,它對(duì)這些支持的更加全面一些颗搂,有很多特性 Tomcat 都直接集成進(jìn)來了。但是 Jetty 的應(yīng)變更加快速幕垦。

Jetty更滿足公有云的分布式環(huán)境的需求丢氢,而Tomcat更符合企業(yè)級(jí)環(huán)境。

Google 應(yīng)用系統(tǒng)引擎最初是以 Apache Tomcat 作為其 webserver/servlet 容器的先改,但最終將切換到 Jetty 上疚察。Google選擇Jetty的關(guān)鍵原因是它的體積和靈活性。 在云計(jì)算里盏道,體積的因素是很重要稍浆,如果你運(yùn)行幾萬個(gè)Jetty的實(shí)例(Google就是這樣干的)载碌,每個(gè)server省1兆猜嘱,那就會(huì)省10幾個(gè)G的內(nèi)存(或能夠給其他應(yīng)用提供更多的內(nèi)存)。

Jetty 被設(shè)計(jì)成了可插拔和可擴(kuò)展的特性嫁艇,這樣Google就可以高度的自定義它朗伶。 他們?cè)谄渲刑鎿Q了他們自己的HTTP connector,Google認(rèn)證步咪,以及他們自己的session集群论皆。也真是奇怪,這個(gè)特性對(duì)于云計(jì)算來說是非常出色的猾漫,但同時(shí)也讓Jetty非常適合嵌入小的設(shè)備中点晴,例如手機(jī)和機(jī)頂盒。


相同點(diǎn):

Tomcat和Jetty都是一種Servlet引擎悯周,他們都支持標(biāo)準(zhǔn)的servlet規(guī)范和JavaEE的規(guī)范粒督。

不同點(diǎn):

架構(gòu)比較

Jetty的架構(gòu)比Tomcat的更為簡(jiǎn)單

Jetty的架構(gòu)是基于Handler來實(shí)現(xiàn)的,主要的擴(kuò)展功能都可以用Handler來實(shí)現(xiàn)禽翼,擴(kuò)展簡(jiǎn)單屠橄。

Tomcat的架構(gòu)是基于容器設(shè)計(jì)的,進(jìn)行擴(kuò)展是需要了解Tomcat的整體設(shè)計(jì)結(jié)構(gòu)闰挡,不易擴(kuò)展锐墙。

性能比較

Jetty和Tomcat性能方面差異不大

Jetty可以同時(shí)處理大量連接而且可以長(zhǎng)時(shí)間保持連接,適合于web聊天應(yīng)用等等长酗。

Jetty的架構(gòu)簡(jiǎn)單溪北,因此作為服務(wù)器,Jetty可以按需加載組件,減少不需要的組件刻盐,減少了服務(wù)器內(nèi)存開銷掏膏,從而提高服務(wù)器性能。

Jetty默認(rèn)采用NIO結(jié)束在處理I/O請(qǐng)求上更占優(yōu)勢(shì)敦锌,在處理靜態(tài)資源時(shí)馒疹,性能較高

少數(shù)非常繁忙;Tomcat適合處理少數(shù)非常繁忙的鏈接,也就是說鏈接生命周期短的話乙墙,Tomcat的總體性能更高颖变。

Tomcat默認(rèn)采用BIO處理I/O請(qǐng)求,在處理靜態(tài)資源時(shí)听想,性能較差腥刹。

其它比較

Jetty的應(yīng)用更加快速,修改簡(jiǎn)單汉买,對(duì)新的Servlet規(guī)范的支持較好衔峰。

Tomcat目前應(yīng)用比較廣泛,對(duì)JavaEE和Servlet的支持更加全面蛙粘,很多特性會(huì)直接集成進(jìn)來垫卤。


Springboot默認(rèn)集成的是Tomcat ,如果想換成Jetty容器出牧,首先則需要把默認(rèn)的Tomcat容器去除穴肘,然后引入Jetty依賴:

修改pom.xml

<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-jetty</artifactId></dependency>

保存更新后發(fā)現(xiàn)下載很慢,于是中斷下載舔痕,準(zhǔn)備切換下載源使用阿里的maven鏡像评抚。

先查看build?path中?libraries下面maven依賴管理下載的文件存放位置,發(fā)現(xiàn)很多jetty相關(guān)文件未下載成功伯复。


先找到maven的本地setting.xml

在Maven中提供了一個(gè)settings.xml文件來定義Maven的全局環(huán)境信息慨代。這個(gè)文件會(huì)存在于Maven的安裝目錄的conf子目錄下面,或者是用戶家目錄的.m2子目錄下面啸如。我們可以通過這個(gè)文件來定義本地倉(cāng)庫(kù)侍匙、遠(yuǎn)程倉(cāng)庫(kù)和聯(lián)網(wǎng)使用的代理信息等。

其實(shí)相對(duì)于多用戶的PC機(jī)而言组底,在Maven安裝目錄的conf子目錄下面的settings.xml才是真正的全局的配置康嘉。而用戶家目錄的.m2子目錄下面的settings.xml的配置只是針對(duì)當(dāng)前用戶的淀弹。當(dāng)這兩個(gè)文件同時(shí)存在的時(shí)候删性,那么對(duì)于相同的配置信息用戶家目錄下面的settings.xml中定義的會(huì)覆蓋Maven安裝目錄下面的settings.xml中的定義庸论。用戶家目錄下的settings.xml文件一般是不存在的,但是Maven允許我們?cè)谶@里定義我們自己的settings.xml厌均,如果需要在這里定義我們自己的settings.xml的時(shí)候就可以把Maven安裝目錄下面的settings.xml文件拷貝到用戶家目錄的.m2目錄下唬滑,然后改成自己想要的樣子。

settings文件內(nèi)容

<?xml version="1.0" encoding="UTF-8"?><settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"? ? ? ? ? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"? ? ? ? ? xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"><mirrors><!--阿里云倉(cāng)庫(kù) --><mirror><id>alimaven</id><mirrorOf>central</mirrorOf><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/repositories/central/</url></mirror><!--中央倉(cāng)庫(kù)1 --><mirror><id>repo1</id><mirrorOf>central</mirrorOf><name>Human Readable Name for this Mirror.</name><url>http://repo1.maven.org/maven2/</url></mirror><!-- 中央倉(cāng)庫(kù)2 --><mirror><id>repo2</id><mirrorOf>central</mirrorOf><name>Human Readable Name for this Mirror.</name><url>http://repo2.maven.org/maven2/</url></mirror></mirrors></settings>

保存update?maven


啟動(dòng)程序之后卻出現(xiàn)錯(cuò)誤提示。?Unable to start embedded container; nested exception is java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory

此處踩坑花了不少時(shí)間去找原因:為什么jetty會(huì)引用tomcat里的jar包晶密。



多方查找原因是缺少了jar包擒悬,jetty9.0之后開始依賴了tomcat-juli ,我用的jetty版本時(shí)9.4.6 稻艰。網(wǎng)上搜索?tomcat-juli?maven

http://mvnrepository.com/artifact/org.apache.tomcat/tomcat-juli/8.5.20


只需要在pom中加入下列依賴即可懂牧。


<dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-juli</artifactId><version>8.5.20</version></dependency>


?用maven?console可以查看?maven?下載日志,以防下載失敗尊勿。


重新啟動(dòng)程序僧凤,ok


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市元扔,隨后出現(xiàn)的幾起案子躯保,更是在濱河造成了極大的恐慌,老刑警劉巖澎语,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件途事,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡擅羞,警方通過查閱死者的電腦和手機(jī)尸变,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來祟滴,“玉大人振惰,你說我怎么就攤上這事歌溉÷⒍” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵痛垛,是天一觀的道長(zhǎng)草慧。 經(jīng)常有香客問我,道長(zhǎng)匙头,這世上最難降的妖魔是什么漫谷? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮蹂析,結(jié)果婚禮上舔示,老公的妹妹穿的比我還像新娘。我一直安慰自己电抚,他們只是感情好惕稻,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蝙叛,像睡著了一般俺祠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天蜘渣,我揣著相機(jī)與錄音淌铐,去河邊找鬼。 笑死蔫缸,一個(gè)胖子當(dāng)著我的面吹牛腿准,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拾碌,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼释涛,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了倦沧?” 一聲冷哼從身側(cè)響起唇撬,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎展融,沒想到半個(gè)月后窖认,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡告希,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年扑浸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片燕偶。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡喝噪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出指么,到底是詐尸還是另有隱情酝惧,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布伯诬,位于F島的核電站晚唇,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏盗似。R本人自食惡果不足惜哩陕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赫舒。 院中可真熱鬧悍及,春花似錦、人聲如沸接癌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)扔涧。三九已至园担,卻和暖如春届谈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背弯汰。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工艰山, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人咏闪。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓曙搬,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親鸽嫂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子纵装,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

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

  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,773評(píng)論 6 342
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)据某,斷路器橡娄,智...
    卡卡羅2017閱讀 134,633評(píng)論 18 139
  • |-1-更新內(nèi)容[6.從倉(cāng)庫(kù)解析依賴的機(jī)制(重要)] 1Maven倉(cāng)庫(kù)作用 倉(cāng)庫(kù)用來存儲(chǔ)所有項(xiàng)目使用到構(gòu)件,在ma...
    zlcook閱讀 6,032評(píng)論 0 25
  • 1.簡(jiǎn)介 之前的maven項(xiàng)目打包類型都為pom或者POM,今天講一下用maven構(gòu)建web應(yīng)用癣籽,web應(yīng)用的打包...
    zlcook閱讀 3,375評(píng)論 0 12
  • 一股微風(fēng)吹云過挽唉, 一滴細(xì)雨滑指落。 兩牛棲棲邀與坐筷狼, 嚼嚼青草看農(nóng)措瓶籽。 農(nóng)顧芬土三手揮, 喜來番薯攜孫歸埂材。
    吹吧呃呃呃閱讀 389評(píng)論 0 1