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

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

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

張峰

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

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

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

1 概述

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

2 SpringBoot技術(shù)介紹

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

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

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

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

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

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

@SpringBootApplication

publicclassApplication {

publicstaticvoid main(String[] args) {

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

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

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

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

5 SpringBoot部署和測試帶來的變革

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

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

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

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

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

7 結(jié)束語

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

參考文獻(xiàn):

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

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

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

主站蜘蛛池模板: 亚洲三级片在线看| 美臀人妻中出中文字幕在线| 国产福利小视频高清在线观看| 国产一级在线观看www色 | 在线无码九区| 久久综合亚洲色一区二区三区| 精品国产免费观看一区| 亚洲性影院| 色有码无码视频| 国产精品99久久久久久董美香| 国产成人精品免费av| 青青操视频在线| 精品午夜国产福利观看| 99久久人妻精品免费二区| 国产日韩精品欧美一区灰| 亚洲日产2021三区在线| 久久久久亚洲AV成人网站软件| 亚洲最大综合网| 亚洲天堂久久| 高清欧美性猛交XXXX黑人猛交| 91黄视频在线观看| 亚洲视频在线观看免费视频| 国产成人艳妇AA视频在线| 国产H片无码不卡在线视频 | 污污网站在线观看| 露脸国产精品自产在线播| 国产在线无码av完整版在线观看| 精品福利一区二区免费视频| 国产在线专区| 久青草免费在线视频| 在线播放精品一区二区啪视频| 国产激情无码一区二区APP| 国产内射一区亚洲| 麻豆国产在线观看一区二区 | 亚洲a免费| 丰满人妻中出白浆| 亚洲日韩Av中文字幕无码| 97se综合| 韩日午夜在线资源一区二区| 日韩欧美一区在线观看| 国产成人综合网| 在线综合亚洲欧美网站| 人妻中文久热无码丝袜| 国产黄色爱视频| 亚洲综合香蕉| 久久semm亚洲国产| 精品91自产拍在线| 日韩免费视频播播| 日韩av无码精品专区| 日韩小视频在线播放| 国产成人精品18| 精品国产中文一级毛片在线看| 久久这里只有精品国产99| 一级爆乳无码av| 一区二区日韩国产精久久| 亚洲综合第一区| 成人综合网址| 国产午夜精品一区二区三区软件| 亚洲第一色网站| 欧美国产三级| 久久免费看片| 国产黑丝视频在线观看| www.精品视频| 日本成人不卡视频| 国产在线拍偷自揄拍精品| 色综合国产| 香蕉视频在线精品| 成人精品视频一区二区在线| 亚洲精品无码久久毛片波多野吉| 欧美成人综合视频| 尤物午夜福利视频| 成年人免费国产视频| 亚洲伊人电影| 黄片在线永久| 日韩毛片免费视频| 欧美a在线看| 亚洲欧美日韩精品专区| 无码中字出轨中文人妻中文中| 国产精品美女免费视频大全 | 国产精品尤物在线| 草草线在成年免费视频2| 久久性妇女精品免费|