javascript
springboot netty给特定客户端推送_Spring Boot 又升级了?2.0 你搞懂了吗?!
【小宅按】作為知名互聯(lián)網(wǎng)公司都在用的技術(shù),Spring Boot 2.0 的更新引起了很大的關(guān)注,本文將分為三部分解讀 2.0 的更新:
- 第一類,基礎(chǔ)環(huán)境升級(jí);
- 第二類,默認(rèn)軟件替換和優(yōu)化;
- 第三類,新技術(shù)的引入。
一. 基礎(chǔ)環(huán)境升級(jí)
Spring Boot 2.0 要求 Java 8 作為最低版本,許多現(xiàn)有的 API 已更新,以利用 Java 8 的特性。如果你正在使用 Java 7 或更早版本,則在開(kāi)發(fā) Spring Boot 2.0 應(yīng)用程序之前,需要升級(jí)你的 JDK。
依賴組件升級(jí):
Spring Boot 2.0 基于 Spring Framework 5 構(gòu)建,Spring Boot 升級(jí)依賴的第三方組件,主要有以下幾個(gè):
- Jetty 9.4,Jetty 是一個(gè)開(kāi)源的 Servlet 容器,它為基于 Java 的 Web 內(nèi)容,例如 JSP 和 Servlet 提供運(yùn)行環(huán)境。Jetty 是使用 Java 語(yǔ)言編寫的,它的 API 以一組 JAR 包的形式發(fā)布。
- Tomcat 8.5,Apache Tomcat 8.5.x 旨在取代 8.0.x,完全支持 Java 9。
- Flyway 5,Flyway 是獨(dú)立于數(shù)據(jù)庫(kù)的應(yīng)用、管理并跟蹤數(shù)據(jù)庫(kù)變更的數(shù)據(jù)庫(kù)版本管理工具。用通俗的話講,Flyway 可以像 SVN 管理不同人的代碼那樣,管理不同人的 SQL 腳本,從而做到數(shù)據(jù)庫(kù)同步。
- Hibernate 5.2,Hibernate 是一款非常流行的 ORM 框架。
- Gradle 3.4,Spring Boot 的 Gradle 插件在很大程度上已被重寫,有了重大的改進(jìn)。
- Thymeleaf 3.0,Thymeleaf 3 相對(duì)于 Thymeleaf 2 有非常大的性能提升。
二. 默認(rèn)軟件替換和優(yōu)化
HikariCP:
默認(rèn)連接池已從 Tomcat 切換到 HikariCP,HikariCP 是一個(gè)高性能的 JDBC 連接池,Hikari 是日語(yǔ)“光”的意思。
HikariCP 號(hào)稱是 Java 業(yè)界最快的數(shù)據(jù)庫(kù)連接池,官網(wǎng)提供了 c3p0、dbcp2、tomcat、vibur 和 Hikari 等數(shù)據(jù)連接池的性能對(duì)比。
Security:
Spring Security 是 Spring 社區(qū)的一個(gè)頂級(jí)項(xiàng)目,也是 Spring Boot 官方推薦使用的 Security 框架。除了常規(guī)的 Authentication 和 Authorization 之外,Spring Security 還提供了諸如 ACLs、LDAP、JAAS、CAS 等高級(jí)特性以滿足復(fù)雜場(chǎng)景下的安全需求。
沒(méi)有使用 Spring Boot 之前集成起來(lái)相對(duì)比較麻煩,而 Spring Boot 中基于 Java 配置實(shí)現(xiàn) Spring Security 功能。Spring Boot 2.0 極大地簡(jiǎn)化了默認(rèn)的安全配置,并使添加定制安全變得簡(jiǎn)單。
Spring Boot 2.0 非常容易使用 Spring Security 5.0 保護(hù)響應(yīng)式應(yīng)用,當(dāng)檢測(cè)到 Spring Security 存在的時(shí)候會(huì)自動(dòng)進(jìn)行默認(rèn)配置。
OAuth 2.0:
OAuth 2.0 關(guān)注客戶端開(kāi)發(fā)者的簡(jiǎn)易性。要么通過(guò)組織在資源擁有者和 HTTP 服務(wù)商之間的被批準(zhǔn)的交互動(dòng)作代表用戶,要么允許第三方應(yīng)用代表用戶獲得訪問(wèn)的權(quán)限。
OAuth 2.0 是一個(gè)授權(quán)框架,或稱授權(quán)標(biāo)準(zhǔn),它可以使第三方應(yīng)用程序或客戶端獲得對(duì) HTTP 服務(wù)上(如 Google、GitHub )用戶帳戶信息的有限訪問(wèn)權(quán)限。OAuth 2.0 通過(guò)將用戶身份驗(yàn)證委派給托管用戶帳戶的服務(wù)以及授權(quán)客戶端訪問(wèn)用戶帳戶進(jìn)行工作。
Spring Boot 2.0 將 Spring Security OAuth 項(xiàng)目遷移到 Spring Security。不再提供單獨(dú)的依賴包,Spring Boot 2.0 通過(guò) Spring Security 5 提供 OAuth 2.0 客戶端支持。
Micrometer:
Micrometer 是一款監(jiān)控指標(biāo)的度量類庫(kù),可以讓你在沒(méi)有供應(yīng)商鎖定的情況下對(duì) JVM 的應(yīng)用程序代碼進(jìn)行調(diào)整。Spring Boot 2.0 增強(qiáng)了對(duì) Micrometer 的集成,不再提供自己的指標(biāo) API。依靠 http://micrometer.io 來(lái)滿足所有應(yīng)用程序監(jiān)視需求。
Micrometer 包括尺寸指標(biāo)的支持,當(dāng)與尺寸監(jiān)測(cè)系統(tǒng)配對(duì)時(shí),尺寸指標(biāo)可以有效訪問(wèn)特定的指定度量標(biāo)準(zhǔn),并且可以在其尺寸范圍內(nèi)向下鉆取。
指標(biāo)可以輸出到各種系統(tǒng)和開(kāi)箱即用的 Spring Boot 2.0,為 Atlas、Datadog、Ganglia、Graphite、Influx、JMX、New Relic、Prometheus、SignalFx、StatsD 和 Wavefront 提供支持,另外還可以使用簡(jiǎn)單的內(nèi)存中度量標(biāo)準(zhǔn)。
集成后提供 JVM 指標(biāo)(包括 CPU、內(nèi)存、線程和 GC)、Logback、Tomcat、Spring MVC & 提供 RestTemplate。
Redis 方面默認(rèn)引入了 Lettuce,替代了之前的 Jedis 作為底層的 Redis 連接方式。
Lettuce 是一個(gè)可伸縮的線程安全的 Redis 客戶端,用于同步、異步和反應(yīng)使用。支持先進(jìn)的 Redis 功能,如 Sentinel、集群、流水線、自動(dòng)重新連接和 Redis 數(shù)據(jù)模型。
配置屬性綁定:
在 Spring Boot 2.0 中,使用 Environment 綁定機(jī)制的 @ConfigurationProperties 數(shù)學(xué)已經(jīng)完全徹底修改。借此機(jī)會(huì)收緊了綁定的規(guī)則,并修復(fù)了 Spring Boot 1.x 中的許多不一致之處。
新的 Binder API 也可以直接使用 @ConfigurationProperties 在代碼中。例如,下面綁定 List 中的 PersonName 對(duì)象:
List<PersonName> people = Binder.get(environment).bind("my.property", Bindable.listOf(PersonName.class)).orElseThrow(IllegalStateException::new);配置源可以像這樣在 YAML 中表示:
my:property:- first-name: Jane last-name: Doe- first-name: John last-name: DoeActuator 改進(jìn):
在 Spring Boot 2.0 中 Actuator endpoints 有很大的改進(jìn),所有 HTTP Actuator endpoints 現(xiàn)在都在該/actuator路徑下公開(kāi),并且生成的 JSON 有效負(fù)載得到了改進(jìn)。
現(xiàn)在默認(rèn)情況下不會(huì)暴露很多端點(diǎn)。如果你要從 Spring Boot 1.5 升級(jí)現(xiàn)有的應(yīng)用,請(qǐng)務(wù)必查看遷移指南并特別注意該 management.endpoints.web.exposure.include 屬性。Spring Boot 2.0 改進(jìn)了從許多端點(diǎn)返回的 JSON 有效負(fù)載。
現(xiàn)在許多端點(diǎn)都具有更精確地反映底層數(shù)據(jù)的 JSON。例如,/actuator/conditions終端(/autoconfig在 Spring Boot 1.5 中)現(xiàn)在有一個(gè)頂級(jí) contexts 密鑰來(lái)將結(jié)果分組 ApplicationContext。
三. 新技術(shù)的引入
支持 HTTP/2:
HTTP/2 是第二代的 HTTP 協(xié)議,Spring Boot 的 Web 容器選擇中 Tomcat,Undertow 和 Jetty 均已支持 HTTP/2。相比 HTTP/1.x,HTTP/2 在底層傳輸做了很大的改動(dòng)和優(yōu)化:
- HTTP/2 采用二進(jìn)制格式傳輸數(shù)據(jù),而非 HTTP/1.x 的文本格式。二進(jìn)制格式在協(xié)議的解析和優(yōu)化擴(kuò)展上帶來(lái)更多的優(yōu)勢(shì)和可能。
- HTTP/2 對(duì)消息頭采用 HPACK 進(jìn)行壓縮傳輸,能夠節(jié)省消息頭占用的網(wǎng)絡(luò)的流量;而 HTTP/1.x 每次請(qǐng)求,都會(huì)攜帶大量冗余頭信息,浪費(fèi)了很多帶寬資源;頭壓縮能夠很好的解決該問(wèn)題。
- 多路復(fù)用,直白的說(shuō)就是所有的請(qǐng)求都是通過(guò)一個(gè) TCP 連接并發(fā)完成。HTTP/1.x 雖然通過(guò) pipeline 也能并發(fā)請(qǐng)求,但是多個(gè)請(qǐng)求之間的響應(yīng)會(huì)被阻塞的,所以 pipeline 至今也沒(méi)有被普及應(yīng)用,而 HTTP/2 做到了真正的并發(fā)請(qǐng)求。同時(shí),流還支持優(yōu)先級(jí)和流量控制。
- Server Push:服務(wù)端能夠更快的把資源推送給客戶端。例如,服務(wù)端可以主動(dòng)把 JS 和 CSS 文件推送給客戶端,而不需要客戶端解析 HTML 再發(fā)送這些請(qǐng)求,當(dāng)客戶端需要的時(shí)候,它已經(jīng)在客戶端了。
嵌入式 Netty 服務(wù)器:
由于 WebFlux 不依賴于 Servlet API,我們現(xiàn)在可以首次為 Netty 作為嵌入式服務(wù)器提供支持,該 spring-boot-starter-webflux 啟動(dòng) POM 將拉取 Netty 4.1 和 Ractor Netty。
注意:你只能將 Netty 用作反應(yīng)式服務(wù)器,不提供阻止 Servlet API 支持。Kotlin的支持:
Spring Boot 2.0 現(xiàn)在包含對(duì) Kotlin 1.2.x 的支持,并提供了 runApplication,一個(gè)使用 Kotlin 運(yùn)行 Spring Boot 應(yīng)用程序的方法。我們還公開(kāi)和利用了 Kotlin 對(duì)其他 Spring 項(xiàng)目(如 Spring Framework,Spring Data 和 Reactor)已添加到其最近版本中的支持。
響應(yīng)式編程:
WebFlux 模塊的名稱是 spring-webflux,名稱中的 Flux 來(lái)源于 Reactor 中的類 Flux。Spring WebFlux 有一個(gè)全新的非堵塞的函數(shù)式 Reactive Web 框架,可以用來(lái)構(gòu)建異步的、非堵塞的、事件驅(qū)動(dòng)的服務(wù),在伸縮性方面表現(xiàn)非常好。
非阻塞的關(guān)鍵預(yù)期好處是能夠以小的固定數(shù)量的線程和較少的內(nèi)存進(jìn)行擴(kuò)展。在服務(wù)器端 WebFlux 支持兩種不同的編程模型:
- 基于注解的 @Controller 和其他注解也支持 Spring MVC;
- Functional 、Java 8 Lambda 風(fēng)格的路由和處理。
默認(rèn)情況下,Spring Boot 2.0 使用 Netty WebFlux,因?yàn)?Netty 在異步非阻塞空間中被廣泛使用,異步非阻塞連接可以節(jié)省更多的資源,提供更高的響應(yīng)度。
Spring Boot 2.0 也提供了對(duì)響應(yīng)式編程的自動(dòng)化配置,如 Reactive Spring Data、Reactive Spring Security 等。
更多精彩內(nèi)容,請(qǐng)滑至頂部點(diǎn)擊右上角關(guān)注小宅哦~
來(lái)源:純潔的微笑 GitChat精品課
總結(jié)
以上是生活随笔為你收集整理的springboot netty给特定客户端推送_Spring Boot 又升级了?2.0 你搞懂了吗?!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: vfp程序改错 计算机和英语,vfp程序
- 下一篇: python的编程模式有哪两种_pyth