自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Spring Boot 2.0正式發(fā)布,升還是不升呢?

開發(fā) 開發(fā)工具
Spring幾乎是每一位Java開發(fā)人員都耳熟能詳?shù)拈_發(fā)框架,不論您是一名初出茅廬的程序員還是經(jīng)驗(yàn)豐富的老司機(jī),都會(huì)對(duì)其有一定的了解或使用經(jīng)驗(yàn)。

 Spring帝國(guó)

Spring幾乎是每一位Java開發(fā)人員都耳熟能詳?shù)拈_發(fā)框架,不論您是一名初出茅廬的程序員還是經(jīng)驗(yàn)豐富的老司機(jī),都會(huì)對(duì)其有一定的了解或使用經(jīng)驗(yàn)。在現(xiàn)代企業(yè)級(jí)應(yīng)用架構(gòu)中,Spring技術(shù)棧幾乎成為了Java語言的代名詞,那么Spring為什么能夠在眾多開源框架中脫穎而出,成為業(yè)內(nèi)一致認(rèn)可的技術(shù)解決方案呢?我們不妨從最初的Spring Framework開始,看看它為什么能夠橫掃千軍,一統(tǒng)江湖!

[[233494]]

挑戰(zhàn)權(quán)威,一戰(zhàn)成名

2004年3月,Spring的***個(gè)版本以及其創(chuàng)始人Rod Johnson的經(jīng)典力作《Expert one-on-one J2EE Development without EJB》發(fā)布,打破了當(dāng)時(shí)Java開發(fā)領(lǐng)域的傳統(tǒng)思考模式,企業(yè)級(jí)應(yīng)用開始走向“輕量化”發(fā)展的步伐。

最初的Spring Framework 1.0并不像如今的Spring那么復(fù)雜,但是在該版本中已經(jīng)包含了Spring中最為核心的兩大要素:依賴注入和面向切面編程,這兩個(gè)功能是Spring區(qū)別于其他優(yōu)秀框架,并在企業(yè)級(jí)應(yīng)用中建立核心地位的關(guān)鍵所在。很多開發(fā)者在初涉Java應(yīng)用的時(shí)候很可能會(huì)覺得這兩個(gè)功能的意義并不大,因?yàn)椴挥盟鼈兾覀円廊豢梢院芎玫膶?shí)現(xiàn)業(yè)務(wù)功能,事實(shí)也確實(shí)如此,但是隨著業(yè)務(wù)的迭代和開發(fā)的深入,復(fù)雜多變的需求開始慢慢侵蝕原本“***”的架構(gòu),開發(fā)與測(cè)試的難度逐步增大,往往在這個(gè)時(shí)候,我們才體會(huì)到了Spring的價(jià)值。所以,即便在Spring的最初版本中也封裝了諸多偏業(yè)務(wù)型的功能封裝,如:郵件發(fā)送、事務(wù)管理等,但我們要知道真正讓企業(yè)級(jí)應(yīng)用離不開Spring的理由并不是這些與業(yè)務(wù)直接相關(guān)的功能,而是上面所提及的與業(yè)務(wù)實(shí)現(xiàn)毫不相關(guān)的兩大核心。

由于在初期版本中Spring對(duì)很多功能性封裝并沒有今天的Spring那么強(qiáng)大,所以很長(zhǎng)一段時(shí)間,我們都采用了Spring做工程管理來整合其他更優(yōu)秀的功能型框架來完成系統(tǒng)開發(fā)的架構(gòu)模式,比如曾經(jīng)風(fēng)靡一時(shí)的Spring + Struts + Hibernate架構(gòu),相信可以勾起一代人的回憶。

優(yōu)雅靈活,吸粉無數(shù)

Spring在發(fā)布并獲得業(yè)界的普遍認(rèn)可之后,Spring開源社區(qū)變得異?;钴S,除了社區(qū)自身不斷對(duì)Spring進(jìn)行增強(qiáng)之外,其他功能性框架也紛紛對(duì)Spring進(jìn)行適配與支持。在隨后發(fā)布的Spring 2.x和3.x中,先后支持了Annotation的優(yōu)雅配置方式以及更為靈活的Java類的配置,這使得Spring在管理Bean的配置方式上變得更為多樣化。

但是隨著Spring的深入應(yīng)用,繁瑣的配置問題也開始顯現(xiàn),我們會(huì)發(fā)現(xiàn)每次在構(gòu)建項(xiàng)目的時(shí)候總是在不斷的復(fù)制黏貼著一些模版化的配置與代碼,有時(shí)候我們只是想實(shí)現(xiàn)幾個(gè)很簡(jiǎn)單的功能,結(jié)果配置內(nèi)容遠(yuǎn)大于業(yè)務(wù)邏輯代碼的編寫;同時(shí),在框架整合過程中,對(duì)于一些共同依賴的Jar包存在著潛在的沖突風(fēng)險(xiǎn),使得一些復(fù)雜的整合任務(wù)變得困難起來。所以,Spring的“輕量級(jí)”在其他動(dòng)態(tài)語言面前就顯得不那么輕了。

輪子大師,前途未卜

在之后的Spring 4.x中除了提供對(duì)Java 8的支持以及對(duì)依賴注入的增強(qiáng)之外,有很長(zhǎng)一段時(shí)間,Spring社區(qū)對(duì)其核心框架的創(chuàng)新就沒有那么出彩了,社區(qū)更多的精力開始將矛頭轉(zhuǎn)向了曾經(jīng)那些親密無間的小伙伴們。于是,我們?cè)赟pring社區(qū)發(fā)現(xiàn)多出了各種功能性的兄弟項(xiàng)目,比如:簡(jiǎn)化數(shù)據(jù)訪問的Spring Data、提供批處理能力的Spring Batch、用于保護(hù)應(yīng)用安全的Spring Security等。

雖然這些框架從個(gè)體來說都有一定的優(yōu)勢(shì)和先進(jìn)的理念,但是對(duì)于很多既有系統(tǒng)來說,在功能性框架上很難做出改變,對(duì)于這些新生的輪子項(xiàng)目就很難得到應(yīng)用,除了一些從零開始的系統(tǒng)會(huì)做一些嘗試之外,鑒于學(xué)習(xí)成本和踩坑風(fēng)險(xiǎn)的考慮,中小團(tuán)隊(duì)對(duì)這些新項(xiàng)目很少有愿意去嘗試的。所以,一些老牌的功能性框架除非有嚴(yán)重的性能或安全問題出現(xiàn),不然很難被這些輪子所替代。

在這段時(shí)間里,雖然Spring社區(qū)推出了那么多的輪子項(xiàng)目,但是真正在國(guó)內(nèi)得到廣泛應(yīng)用的并不多,很多開發(fā)團(tuán)隊(duì)依然只是使用最核心的IOC和AOP,并根據(jù)自己團(tuán)隊(duì)的技術(shù)棧情況整合出更適合自身的腳手架來進(jìn)行系統(tǒng)開發(fā)。

神兵出世,再創(chuàng)輝煌

2014年4月1日,Spring Boot發(fā)布了***個(gè)正式版本。該項(xiàng)目旨在幫助開發(fā)者更容易地創(chuàng)建基于Spring的應(yīng)用程序和服務(wù),使得現(xiàn)有的和新的Spring開發(fā)者能夠最快速地獲得所需要的Spring功能。一直到今天發(fā)布2.x版本,共經(jīng)歷了近4年的發(fā)展,Spring Boot已經(jīng)是一個(gè)擁有了21000多Star,15000多次Commits,貢獻(xiàn)者超過400多名的超熱門開源項(xiàng)目。

Spring Boot為什么突然如此備受關(guān)注與推崇呢?主要有以下幾點(diǎn):

簡(jiǎn)化依賴管理:在Spring Boot中提供了一系列的Starter POMs,將各種功能性模塊進(jìn)行了劃分與封裝,讓我們可以更容易的引入和使用,有效的避免了用戶在構(gòu)建傳統(tǒng)Spring應(yīng)用時(shí)維護(hù)大量依賴關(guān)系而引發(fā)的JAR沖突等問題。

自動(dòng)化配置:Spring Boot為每一個(gè)Starter都提供了自動(dòng)化的Java配置類,用來替代我們傳統(tǒng)Spring應(yīng)用在XML中繁瑣且并不太變化的Bean配置;同時(shí)借助一系列的條件注解修飾,使得我們也能輕松的替換這些自動(dòng)化配置的Bean來進(jìn)行擴(kuò)展。

嵌入式容器:除了代碼組織上的優(yōu)化之外,Spring Boot中支持的嵌入式容器也是一個(gè)極大的亮點(diǎn)(此處仿佛又聽到了Josh Long的那句:“Deploy as a Jar, not a War”),借助這個(gè)特性使得Spring Boot應(yīng)用的打包運(yùn)行變得非常的輕量級(jí)。

生產(chǎn)級(jí)的監(jiān)控端點(diǎn):spring-boot-starter-actuator的推出可以說是Spring Boot在Spring基礎(chǔ)上的另一個(gè)重要?jiǎng)?chuàng)新,為Spring應(yīng)用的工程化變得更加***。該模塊并不能幫助我們實(shí)現(xiàn)任何業(yè)務(wù)功能,但是卻在架構(gòu)運(yùn)維層面給予我們更多的支持,通過該模塊暴露的HTTP接口,我們可以輕松的了解和控制Spring Boot應(yīng)用的運(yùn)行情況。

Spring Boot雖然是基于Spring構(gòu)建的,但是通過上面這些特性的支持,改變了我們使用Spring的姿勢(shì),極大得簡(jiǎn)化了構(gòu)建企業(yè)級(jí)應(yīng)用的各種配置工作,尤其對(duì)于很多初學(xué)者來說,變得更加容易入門使用。

Spring Boot 2.0 如約而至,升級(jí)與否?

萬眾期待的Spring Boot 2.0終于發(fā)布了***個(gè)正式版本,為什么Spring Boot 2.0如此受期待呢?我認(rèn)為主要有以下幾個(gè)原因:

支持***的Java 9

基于Spring 5構(gòu)建,Spring的新特性均可以在Spring Boot 2.0中使用

為各種組件的響應(yīng)式編程提供了自動(dòng)化配置,如:Reactive Spring Data、Reactive Spring Security等

支持Spring MVC的非阻塞式替代方案WebFlux以及嵌入式Netty Server

Spring Boot 2.0的發(fā)布,Spring Cloud Finchley還會(huì)遠(yuǎn)嗎?

上述列舉的內(nèi)容是筆者主要關(guān)心的重要內(nèi)容,并非Spring Boot 2.0所有的新特性,對(duì)于不同的使用者來說相信會(huì)有不同的關(guān)注點(diǎn)。除此之外,在Spring Boot 2.0中還有非常多其他令人振奮的新特性,比如:對(duì)HTTP/2的支持、新增了更靈活的屬性綁定API(可以不通過@ConfigurationProperties注解就能實(shí)現(xiàn)配置內(nèi)容讀取和使用)、對(duì)Spring Security整合的簡(jiǎn)化配置、Gradle插件的增強(qiáng)、Actuator模塊的優(yōu)化等等。本文不對(duì)這些新特性做詳細(xì)的介紹,下面主要說說,我們是否有必要將我們的Spring Boot 1.x升級(jí)到Spring Boot 2.x,在這過程中,我們需要考慮和注意哪些問題。

Java版本要求的變化

我們?cè)谶x擇是否要升級(jí)Spring Boot的時(shí)候,***需要考慮的是Java版本的選擇。在Spring Boot 2.0中提高了對(duì)Java版本的要求,我們需要至少使用Java 8才能使用它,如果您的Spring Boot應(yīng)用還運(yùn)行在Java 7上,那就還得考慮Java的升級(jí)成本。

另外,在未來的一段時(shí)間內(nèi),您是否想要使用Java 9將是一個(gè)影響升級(jí)與否的重要決策依據(jù),因?yàn)镾pring Boot 1.x版本明確說明了沒有對(duì)Java 9的支持計(jì)劃;換言之,如果你想將Spring Boot運(yùn)行在Java 9上,那么你必須升級(jí)到Spring Boot 2.0。

Tips:當(dāng)前版本的Spring Boot 2.0雖然支持Java 9,但是依然還有一些問題。比如:JDK的代理支持需要使用AspectJ 1.9,但是該版本還處于RC版;還不支持Apache Cassandra;對(duì)于JSP TLDs在嵌入式Tomcat中也無法支持等情況。對(duì)于這些問題的具體處理方法可見:Running Spring Boot on Java 9

依賴組件的升級(jí)

Spring Boot的Starter中整合了不少優(yōu)秀的第三方組件,這些組件的升級(jí)也需要我們做好一定的考量,在這些組件的版本升級(jí)過程中,使用上是否有變化等問題。其中,最為關(guān)鍵的幾個(gè)組件需要我們注意:

  • Tomcat升級(jí)至8.5
  • Flyway升級(jí)至5
  • Hibernate升級(jí)至5.2
  • Thymeleaf升級(jí)至3

Tips:前幾日曝出的Tomcat漏洞問題。經(jīng)查Spring Boot 2.0選用的版本為8.5.28,屬于安全版本,所以大家可以放心使用。

依賴重組和配置重定位

在Spring Boot 2.0的升級(jí)過程中,可能這部分內(nèi)容將是大家要做出較多修改的地方,所以建議大家在這里留個(gè)心眼。由于Spring Boot在構(gòu)建Starter POMs的時(shí)候并非是扁平的一層結(jié)構(gòu),一些功能模塊Starter之間是存在包含引用關(guān)系的,比如:spring-boot-starter-thymeleaf中包含了spring-boot-starter-web,因?yàn)閠hymeleaf模版引擎之前肯定是在Spring MVC下使用的。但是,在Spring Boot 2.0中,WebFlux的出現(xiàn)對(duì)于Web應(yīng)用的解決方案將不再唯一,因此spring-boot-starter-thymeleaf中的依賴就不在包含spring-boot-starter-web,開發(fā)人員需要自己添加spring-boot-starter-web或spring-boot-starter-webflux來決定是使用哪個(gè)模塊實(shí)現(xiàn)Web應(yīng)用。

除了類似上面的依賴重組之后,在Spring Boot 2.0中對(duì)于配置屬性的重定位也是比較多的,這將導(dǎo)致一些原有的配置將不再生效,需要我們手工的去修改這些配置的Key來完成升級(jí)適配。比如,一些與servlet相關(guān)的server.*屬性重定位到server.servlet前綴下:

更多的依賴變化、配置重定位以及默認(rèn)配置的變化,讀者可自行查閱官方升級(jí)手冊(cè):Spring Boot 2.0 Migration Guide

不必要的顧慮

之前有朋友在spring4all社區(qū)上問:如果Spring Boot升級(jí)2.0,2.0出了那么多新功能,我們的業(yè)務(wù)代碼是否也需要隨之修改,風(fēng)險(xiǎn)會(huì)不會(huì)很大?其實(shí),這個(gè)問題大家完全不用太多的顧慮,Spring Boot 2.0雖然新增了很多強(qiáng)大的新特性,但是對(duì)于原有功能的支持并沒有拋棄。所以,就算我們不用任何類似WebFlux這樣的新功能,將工程升級(jí)到了Spring Boot 2.0之后,繼續(xù)使用Spring MVC開發(fā)我們的項(xiàng)目也是完全沒有影響的。只是,就如上面所述的,我們可能需要做一些依賴和配置上的調(diào)整才能繼續(xù)將應(yīng)用正常的運(yùn)行起來。

總結(jié)與展望

感謝大家能夠讀完上面我對(duì)Spring Boot 2.0的薄見,希望這些內(nèi)容能夠?qū)δ赟pring Boot 2.0的選擇上有一定的參考價(jià)值。這個(gè)版本雖然不像Spring Boot 1.0那樣顛覆我們對(duì)繁瑣的Spring應(yīng)用的認(rèn)識(shí),但是依然透露著很多時(shí)代前沿的氣息。同時(shí),Spring Boot 2.0的發(fā)布,也意味著Spring Cloud Finchley里正式發(fā)布又近了一步,因?yàn)檫@個(gè)版本中同樣的將會(huì)帶來很多令人興奮的內(nèi)容,相信這一天的到來也不遠(yuǎn)了!

對(duì)于當(dāng)前Spring Boot 2.0的遷移升級(jí),作為一名Spring Boot與Spring Cloud的忠實(shí)擁護(hù)者,在時(shí)間允許的情況下,這是一件必然會(huì)去嘗試的事情,在未來的時(shí)間里,我也盡可能的希望抽出時(shí)間繼續(xù)分享一些其中的問題與收獲,與大家共勉!

參考資料

Spring Boot 2.0 Release Notes

Spring Boot 2.0 Migration Guide

Running Spring Boot on Java 9

【本文為51CTO專欄作者“翟永超”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過51CTO聯(lián)系作者獲取授權(quán)】

戳這里,看該作者更多好文

責(zé)任編輯:武曉燕 來源: 51CTO專欄
相關(guān)推薦

2018-05-30 14:56:24

Spring輕量化Java 8

2021-12-13 08:15:01

SpringSpring Boot開發(fā)

2011-09-14 10:08:16

MongoDB

2012-02-21 09:40:59

Java

2012-07-02 10:40:24

GroovyJavaJVM

2011-10-09 14:13:31

JavaFX

2011-12-16 09:12:16

java

2022-06-16 10:53:22

SUSELinuxopenEuler

2021-10-15 09:14:17

微軟Windows 11Windows

2022-11-26 00:00:03

Spring指南體系

2011-04-11 14:59:56

Qomo Linux

2020-05-18 11:54:59

iOS 13.4.1蘋果升級(jí)

2019-05-17 15:26:06

Spring BootSpring BootJava

2013-07-24 13:31:29

SUSESUSE Cloud

2009-06-19 13:12:05

Spring2.0Spring2.0.7

2011-03-02 10:03:44

SaturnJSJS

2011-07-01 10:00:19

紅帽Red Hat Ent

2010-01-05 13:13:01

Windows 7系統(tǒng)升級(jí)

2022-12-12 08:34:57

SpringJava

2018-06-20 15:33:44

Spring BootJava 9JDK
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)