999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

應(yīng)用SpringBoot改變web應(yīng)用開(kāi)發(fā)模式

2017-09-01 11:37:27張峰
科技創(chuàng)新與應(yīng)用 2017年23期

張峰

摘 要:SpringBoot給Spring項(xiàng)目以及web開(kāi)發(fā)帶來(lái)了非常大的影響和改變,文章通過(guò)對(duì)SpringBoot項(xiàng)目介紹分析了其各個(gè)應(yīng)用方面,得出了SpringBoot對(duì)web開(kāi)發(fā)影響重大的結(jié)論。

關(guān)鍵詞:SpringBoot;JavaEE;web開(kāi)發(fā);Docker

中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):2095-2945(2017)23-0193-02

1 概述

近年來(lái)Spring項(xiàng)目的流行使開(kāi)發(fā)者放棄笨重的JavaEE體系,開(kāi)源社區(qū)發(fā)展壯大。SpringBoot的出現(xiàn)又使Spring變得易于開(kāi)發(fā)和維護(hù)。本文介紹了SpringBoot和分析其與JavaEE開(kāi)發(fā)體系的不同。分析以SpringBoot為核心的開(kāi)發(fā)框架組成。最后分析部署、測(cè)試、監(jiān)控和管理生產(chǎn)環(huán)境等問(wèn)題。

2 SpringBoot技術(shù)介紹

SpringBoot是由Pivotal團(tuán)隊(duì)開(kāi)發(fā)的全新的開(kāi)源開(kāi)發(fā)框架[1],從誕生初期它就著有明確的目的,簡(jiǎn)化應(yīng)用Spring開(kāi)發(fā)項(xiàng)目。最突出的特點(diǎn)是配置方式,大大簡(jiǎn)化了Spring應(yīng)用各個(gè)方面的配置。另外SpringBoot能夠集成大量的框架,解決了之前很重要的項(xiàng)目之間包的版本依賴(lài)和穩(wěn)定性問(wèn)題。同時(shí)有了SpringBoot使springcloud眾多的組件項(xiàng)目得以良好地被應(yīng)用,從而改變了web應(yīng)用的開(kāi)發(fā)模式。

SpringBoot技術(shù)的特點(diǎn)有以下幾點(diǎn)[2]:可以類(lèi)似點(diǎn)菜一樣地選配、組裝、生成一個(gè)獨(dú)立的開(kāi)發(fā)初始項(xiàng)目;在內(nèi)部?jī)?nèi)置了Tomcat服務(wù)器和Jetty服務(wù)器,直接把項(xiàng)目打成jar包,這應(yīng)該是為Docker特意設(shè)計(jì)的;使用叫做starterPOMs的配置方式使Maven配置大幅度簡(jiǎn)化;SpringBoot還為大中型項(xiàng)目提供了經(jīng)常用到的非業(yè)務(wù)功能型的特點(diǎn)。比如:健康狀態(tài)檢測(cè),外部配置、指標(biāo)、安全等;在項(xiàng)目中不再推薦使用xml的方式。

3 SpringBoot與傳統(tǒng)JavaEE項(xiàng)目開(kāi)發(fā)模式比較

Javaweb應(yīng)用開(kāi)發(fā)從最早的Servlet技術(shù)開(kāi)始已經(jīng)經(jīng)歷了很多變化,在這段歷史中產(chǎn)生了獨(dú)立的一整套的生態(tài)系統(tǒng)和大量的開(kāi)源項(xiàng)目。EJB2.0改變了很多,但也還是保留了權(quán)威、官方和學(xué)術(shù)化的整體風(fēng)格。在這個(gè)時(shí)候Spring等大批輕量級(jí)框架開(kāi)始產(chǎn)生,發(fā)展到今天已經(jīng)和JavaEE的開(kāi)發(fā)模式形成有明顯區(qū)別的一派。真正讓我們看到開(kāi)源社區(qū)改變JavaEE的應(yīng)該是JAP,它的標(biāo)準(zhǔn)明顯傾向于Hibernate。Java被Oracle收購(gòu)后對(duì)JavaEE不斷發(fā)展但開(kāi)發(fā)模式?jīng)]有很大的發(fā)展。

SpringBoot是在Spring的大框架下,離不開(kāi)兩項(xiàng)關(guān)鍵技術(shù)依賴(lài)注入和面向方面編程AOP。在JDK5引入的Annotation出現(xiàn)后Spring大量采用這種配置方式,但之前都是采用配置xml文件的形式。xml文件在webservice流行的時(shí)期被推崇的很高。開(kāi)發(fā)人員漸漸發(fā)現(xiàn)xml文件越來(lái)越多,書(shū)寫(xiě)困難(可以對(duì)比YAML文件的書(shū)寫(xiě)),調(diào)試?yán)щy等等。所以Spring當(dāng)初被人的批評(píng)很多都是因?yàn)閤ml配置過(guò)多。而SpringBoot的改變不是僅僅采用了更好的配置文件格式那么簡(jiǎn)單。SpringBoot是采用了最初在Maven中看到的“約定大于配置”(Convention over configuration)的思想,也叫慣例優(yōu)先原則。簡(jiǎn)單地解釋就是絕大多數(shù)配置信息按約定采用缺省配制,用戶(hù)需要的個(gè)性配置采用properties文件或yaml文件的格式寫(xiě)在統(tǒng)一的文件中。其他在開(kāi)發(fā)中的配置信息要么采用Annotation要么采用配置類(lèi)形式。也就是說(shuō)SpringBoot可以達(dá)到免xml文件配置。這點(diǎn)區(qū)別于傳統(tǒng)項(xiàng)目開(kāi)發(fā)的特點(diǎn)也是給開(kāi)發(fā)效能提升帶來(lái)巨大效果的。

SpringBoot的項(xiàng)目開(kāi)發(fā)以上的改變?nèi)绻€不算很大,SpringBoot是如何打包部署的:

@SpringBootApplication

publicclassApplication {

publicstaticvoid main(String[] args) {

SpringApplication.run(Application.class, args);}}

這段代碼雖然簡(jiǎn)單但反映出幾個(gè)關(guān)鍵問(wèn)題。SpringBoot的運(yùn)行方式是main方法。另外這個(gè)項(xiàng)目是Javaweb項(xiàng)目,它必然需要web容器,但這不是war包形式部署。實(shí)際上SpringBoot改變了傳統(tǒng)開(kāi)發(fā)模式,將其開(kāi)發(fā)的javaweb項(xiàng)目?jī)?nèi)部?jī)?nèi)嵌了一個(gè)Tomcat,而關(guān)鍵是最終的打包形式是一個(gè)包含了所有項(xiàng)目文件和內(nèi)嵌web容器的jar包。這個(gè)jar包的打包形式為將來(lái)部署到Docker上提供了良好的條件,這個(gè)后面還會(huì)提到。SpringBoot使Javaweb項(xiàng)目開(kāi)發(fā)變得輕松很多,當(dāng)然它的貢獻(xiàn)也不止以上這些,當(dāng)項(xiàng)目真正采用它來(lái)開(kāi)發(fā)一般不會(huì)再退回原來(lái)的開(kāi)發(fā)方式了。

4 SpringBoot 應(yīng)用系統(tǒng)開(kāi)發(fā)模板架構(gòu)設(shè)計(jì)

從前臺(tái)到后臺(tái)的順序進(jìn)行分析。從頁(yè)面來(lái)看,現(xiàn)在的主流已經(jīng)淘汰了jsp技術(shù)。前臺(tái)常使用模板引擎,主要有FreeMarker,它是一個(gè)用Java語(yǔ)言編寫(xiě)的模板引擎,基于模板來(lái)生成文本輸出。還有Thymeleaf,它和FreeMarker的原理類(lèi)似,可以達(dá)到頁(yè)面圖形設(shè)計(jì)和應(yīng)用邏輯的分離。但SpringBoot推薦使用Thymeleaf,原因首先是它可以和SpringMVC很好結(jié)合,其次和其他模板引擎相比它的模板可以直接用瀏覽器正確顯示,這也稱(chēng)為自然的模板技術(shù)。但其使用的DOM解析所以不適合處理大XML文件。在前端開(kāi)發(fā)還常用到BootStrap、AngularJS、JQuery等。接下來(lái)在瀏覽器數(shù)據(jù)傳輸上采用Json的格式RESTful傳輸。在數(shù)據(jù)到達(dá)服務(wù)器后接受請(qǐng)求的是SpringMVC框架,這個(gè)框架已經(jīng)取代Struts2成為控制層絕對(duì)的主流了。到持久層框架現(xiàn)在的主流技術(shù)有Hibernate、Mybatis、JPA,各有優(yōu)缺點(diǎn)不再贅述。SpringBoot推薦使用Spring Data+JPA的方式,當(dāng)然引擎常用Hibernate,數(shù)據(jù)庫(kù)使用MySQL。開(kāi)發(fā)工具推薦用IntelliJ IDEA。endprint

5 SpringBoot部署和測(cè)試帶來(lái)的變革

SpringBoot項(xiàng)目能夠很好地部署于Docker類(lèi)的虛擬容器中。Docker是2013年DotCloud公司發(fā)起,開(kāi)源后快速發(fā)展。已經(jīng)形成以Docker為中心的生態(tài)體系。Docker加入了Linux基金會(huì),遵循Apache2.0協(xié)議。Docker的受歡迎程度很高,應(yīng)用該項(xiàng)技術(shù)的大型互聯(lián)網(wǎng)公司幾乎占據(jù)主流市場(chǎng)的三分之一以上。SpringBoot也針對(duì)Docker技術(shù)做了很多設(shè)計(jì)和優(yōu)化以適應(yīng)容器技術(shù)。Docker引擎的基礎(chǔ)組件是Linuxcontainers(LXC)。各種工具的豐富使Docker應(yīng)用迅速普及,正如Solomon Hykes所說(shuō):Docker在正確的地點(diǎn)、正確的時(shí)間順應(yīng)了正確的趨勢(shì)——即高效地構(gòu)建應(yīng)用。隔離是Docker的重點(diǎn),正如JavaVM隔離了硬件資源環(huán)境影響一樣,Docker將容器外環(huán)境的改變變得不那么重要了,程序的移植變得象拷貝文件一樣簡(jiǎn)單了。這給運(yùn)維帶來(lái)了極大的方便。利用SpringB

oot Maven plugin將Maven引入SpringBoot項(xiàng)目是一個(gè)關(guān)鍵,Spotify 的 docker-maven-plugin 插件可以用來(lái)構(gòu)建Maven的Docker鏡像。可以編寫(xiě)Dockerfile來(lái)指定特定的鏡像層。之后可以將鏡像推送到DockerHub上,DockerHub是一個(gè)類(lèi)似GitHub原理的鏡像托管平臺(tái)。在項(xiàng)目開(kāi)發(fā)階段最好的做法是使用持續(xù)集成的做法,即使用Jenkins來(lái)結(jié)合Git Hooks,當(dāng)代碼Push到Git服務(wù)器后,Jenkins自動(dòng)去執(zhí)行shell腳本文件Pull的代碼,又Maven變異打包生成最新的鏡像文件。最后再push到DockerHub上。裝有Docker的服務(wù)器從DockerHub上的到鏡像運(yùn)行該鏡像的所屬容器從而完成整個(gè)部署過(guò)程。另外由于在SpringBoot中的模板引擎默認(rèn)開(kāi)啟緩存,利用Spring Loaded實(shí)現(xiàn)類(lèi)文件修改熱部署,利用JRebel可以實(shí)現(xiàn)開(kāi)發(fā)熱部署,這樣會(huì)極大提高開(kāi)發(fā)調(diào)測(cè)效率。

SpringBoot在測(cè)試方面也帶了很多的改變[3]。首先,在SpringBoot項(xiàng)目中按照其一慣的starter做法在項(xiàng)目中加入spring-boot-starter-test的依賴(lài),其他的關(guān)于測(cè)試的依賴(lài)就不用再管理了。根據(jù)SpringBoot的最佳實(shí)踐在項(xiàng)目src/test/java目錄下添加測(cè)試類(lèi)。其次,測(cè)試類(lèi)SpringBoot使用@springapplicationconfiguration代替了@contextConfiguration配置SpringBoot的應(yīng)用上下文,還有兩個(gè)常用的Annotation是@RunWith(SpringJUnit4ClassRunner.class)和@WebAppConfiguration,使用@transactional保證測(cè)試操作的回滾,具體的測(cè)試方法就完全按照J(rèn)unit的方式做了。在controller層測(cè)試類(lèi)為了MockMvc而注入了WebApplicationContext。這里充分利用了SpringMVC的測(cè)試功能。測(cè)試的過(guò)程可以總結(jié)歸納為以下過(guò)程,為項(xiàng)目準(zhǔn)備測(cè)試的環(huán)境;通過(guò)MockMvc來(lái)模擬執(zhí)行http請(qǐng)求;增加驗(yàn)證的JUnit Assert還有處理結(jié)果Assert。收到MvcResult后進(jìn)行自定義Assert又從新進(jìn)行下一步的異步請(qǐng)求;最后卸載掉測(cè)試用的MockMvc環(huán)境,完成測(cè)試。總之SpringBoot利用和SpringMVC的關(guān)系將測(cè)試變得簡(jiǎn)單實(shí)用,為后期自動(dòng)化集成測(cè)試奠定良好的基礎(chǔ)。

6 SpringBoot監(jiān)控和管理生產(chǎn)環(huán)境

SpringBoot給web系統(tǒng)開(kāi)發(fā)帶來(lái)的改變中一個(gè)重要的方面就是監(jiān)控和管理生產(chǎn)環(huán)境。如何實(shí)時(shí)監(jiān)控應(yīng)用系統(tǒng)信息的各項(xiàng)功能是否健康,就要通過(guò)系統(tǒng)各方面的性能安全指標(biāo)數(shù)值來(lái)評(píng)估。這樣可以在系統(tǒng)變得不穩(wěn)定的時(shí)期就發(fā)現(xiàn)或解決問(wèn)題,而不是系統(tǒng)功能停止時(shí)刻才發(fā)現(xiàn),從而避免業(yè)務(wù)遭受打擊。大規(guī)模互聯(lián)網(wǎng)應(yīng)用一定會(huì)有專(zhuān)門(mén)的網(wǎng)管系統(tǒng),但應(yīng)用系統(tǒng)內(nèi)部情況就不會(huì)監(jiān)控得那么細(xì)致了。Spring可以監(jiān)控到什么信息呢,如:當(dāng)前應(yīng)用的所有配置、當(dāng)前應(yīng)用中所有的Bean的信息、所有配置屬性、線程狀態(tài)信息、當(dāng)前環(huán)境信息、應(yīng)用健康狀況、當(dāng)前應(yīng)用的各項(xiàng)指標(biāo)信息、所有@RequestMapping映射的路徑、顯示追蹤信息以及所有EndPoint列表。可以看到內(nèi)容非常豐富而且實(shí)用。這些監(jiān)控信息通過(guò)監(jiān)控和管理端點(diǎn)的形式提供給開(kāi)發(fā)者。而前提是在POM文件中加入spring-boot-starter-actuator這個(gè)依賴(lài)。在創(chuàng)建項(xiàng)目時(shí)可以選擇Actuator、web和HATEOAS這幾個(gè)模塊。當(dāng)項(xiàng)目部署完成可以通過(guò)http URL地址訪問(wèn)到這些監(jiān)控信息,如:http://localhost:8080/actuator可以看到所有EndPoint列表;http://localhost:8080/beans可以看到所有Beans列表等。甚至還可以自定義端點(diǎn)對(duì)一些業(yè)務(wù)指標(biāo)進(jìn)行監(jiān)控,這是任何市場(chǎng)盒裝系統(tǒng)監(jiān)控產(chǎn)品也做不到的。另外SpringBoot在web系統(tǒng)監(jiān)控開(kāi)發(fā)的提升開(kāi)可以利用JMX(Java Management Extensions,即Java管理擴(kuò)展)進(jìn)行。

7 結(jié)束語(yǔ)

SpringBoot對(duì)于Spring平臺(tái)無(wú)疑是巨大的提升。無(wú)論在開(kāi)發(fā)階段還是部署測(cè)試階段,甚至系統(tǒng)在線運(yùn)行階段,SpringBoot都在發(fā)揮著他的作用。使web系統(tǒng)開(kāi)發(fā)在多方面整體提升。隨著微框架的推廣,作為底層支持的SpringBoot正在改變web應(yīng)用開(kāi)發(fā)模式。

參考文獻(xiàn):

[1]Pivotal團(tuán)隊(duì).Spring Boot Reference Guide1.5.3.RELEASE[OL].2017.

[2]王永和,張勁松,鄧安明,等.Spring Boot研究和應(yīng)用[J].信息通信,2016(10):91-94.

[3]汪云飛.JavaEE開(kāi)發(fā)的顛覆者Spring Boot實(shí)戰(zhàn)[Z].2016.endprint

主站蜘蛛池模板: 色天天综合| 在线观看精品自拍视频| AV不卡在线永久免费观看| 97av视频在线观看| 超清无码熟妇人妻AV在线绿巨人 | 无码在线激情片| 国产成人91精品| 五月激情综合网| 亚洲一区二区视频在线观看| 国产成人亚洲精品蜜芽影院| 亚洲色图欧美在线| 一本色道久久88亚洲综合| 午夜精品福利影院| 毛片免费在线| 色综合天天操| 91区国产福利在线观看午夜| 亚洲免费人成影院| 亚洲精品视频免费看| 国产成人一区在线播放| 制服丝袜在线视频香蕉| 狠狠色综合网| 国产超碰一区二区三区| 8090午夜无码专区| 免费观看国产小粉嫩喷水| 热久久国产| 中文天堂在线视频| 无码区日韩专区免费系列 | 色综合成人| 国产主播一区二区三区| 精品成人一区二区三区电影| 中文无码精品a∨在线观看| 99精品视频在线观看免费播放| 91在线精品麻豆欧美在线| 麻豆国产精品视频| 蜜臀AV在线播放| 成人在线观看一区| 狼友视频国产精品首页| 日a本亚洲中文在线观看| 免费Aⅴ片在线观看蜜芽Tⅴ| 一级毛片在线播放| 亚洲欧美不卡| 欧美www在线观看| 国产菊爆视频在线观看| 粗大猛烈进出高潮视频无码| 极品av一区二区| 国内精品一区二区在线观看| 伊人激情综合| 亚洲不卡av中文在线| 欧美中文字幕在线二区| 日韩无码真实干出血视频| 免费三A级毛片视频| 亚洲精品欧美日本中文字幕| 亚洲人人视频| 91精品免费久久久| 欧美成人aⅴ| 亚洲成a人片77777在线播放 | 亚洲国产亚综合在线区| 人妻无码一区二区视频| 国产无码在线调教| 日本免费一级视频| 国产精品免费入口视频| 九色91在线视频| AV片亚洲国产男人的天堂| 999国内精品视频免费| 亚洲区第一页| 青青青国产在线播放| 伊人久久大香线蕉aⅴ色| 精品亚洲麻豆1区2区3区| 亚洲水蜜桃久久综合网站 | 干中文字幕| 亚洲综合色婷婷中文字幕| 热99re99首页精品亚洲五月天| 嫩草国产在线| 亚洲人成电影在线播放| 最新国产成人剧情在线播放 | 亚洲高清国产拍精品26u| 国产制服丝袜91在线| 精品福利国产| 国产精品永久在线| 亚洲无线视频| 亚洲人成亚洲精品| 精品综合久久久久久97|