<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          新版本Spring拋棄JVM,網(wǎng)友:要自立門戶???

          共 5662字,需瀏覽 12分鐘

           ·

          2021-06-24 18:03

          點擊上方[全棧開發(fā)者社區(qū)]右上角[...][設(shè)為星標?]

          點擊領(lǐng)取全棧資料全棧資料

          Spring 團隊日前發(fā)布了 Spring Native 版。通過Spring Native,Spring 應(yīng)用將有機會與 GraalVM 原生鏡像的方式運行。為了更好地支持原生運行,Spring Native 提供了 Maven 和 Gradle 插件,并且提供了優(yōu)化原生配置的注解。

          Spring 發(fā)布了 Spring Native 的 beta 版本,并在http://start.spring.io上運行它。

          實際上,這意味著自 Spring 成立以來,除了 Spring 支持的常規(guī) Java 虛擬機之外,我們還將添加 Beta 支持,以使用 GraalVM 將 Spring 應(yīng)用程序編譯到本機映像中,從而提供一種部署 Spring 應(yīng)用程序的新方法。支持 Java 和 Kotlin。

          這些本機 Spring 應(yīng)用程序可以部署為獨立的可執(zhí)行文件(無需安裝 JVM),并提供有趣的特性,包括幾乎即時啟動(通常<100ms),即時峰值性能和較低的內(nèi)存消耗,但所需的構(gòu)建時間和運行時優(yōu)化次數(shù)少于 JVM。

          圖片

          使用簡單mvn spring-boot:build-imagegradle bootBuildImage命令,您可以生成一個優(yōu)化的容器映像,該映像將包含一個最小的 OS 層和一個小的本機可執(zhí)行文件,該映像僅隨附 JDK,Spring 以及您在應(yīng)用程序中使用的依賴項中的必需位。

          請參閱下面的示例,其中包含 50MB 可執(zhí)行文件的最小容器映像,其中包含 Spring Boot,Spring MVC,Jackson,Tomcat,JDK 和應(yīng)用程序。

          圖片

          這種原生方式,在很多場景下都會對 Spring 應(yīng)用產(chǎn)生價值:

          • 具有 Spring Cloud 功能的無服務(wù)器
          • 以更便宜和更可持續(xù)的方式托管 Spring 微服務(wù)
          • 非常適合 VMware Tanzu 等 Kubernetes 平臺
          • 想要創(chuàng)建最佳的容器映像來打包您的 Spring 應(yīng)用程序和服務(wù)

          在使用場景上,比如 Piotr Mińkowski 提供了一個非常棒的指南,介紹了如何在 Knative 上使用 Spring Boot 和 GraalVM 構(gòu)建原生微服務(wù)。

          1. 團隊協(xié)作

          Spring Native beta 是整個 Spring 團隊及其家族項目廣泛合作的結(jié)果:Spring Framework、Spring Boot 還包括 Spring Data、Spring Security、Spring Cloud 和 Spring Initializr。

          據(jù)悉,原生功能的工作范圍比 Spring 更廣,因為原生涉及到更廣泛的 JVM 生態(tài)系統(tǒng),所以官方一直在與 GraalVM 團隊合作,以改善原生鏡像的兼容性和資源消耗。

          以下是來自 GraalVM 團隊的 Vojin Jovanovic 的一段話。

          “與 Spring 團隊協(xié)作打造原生 JVM 生態(tài)系統(tǒng)是一件非常愉快的事情:他們深厚的技術(shù)知識,再加上對社區(qū)的敏感觸覺,總是能帶來最好的解決方案。最新的 Spring Native 版本,以及它在 JVM 生態(tài)系統(tǒng)中的眾多用法,為原生編譯的廣泛采用鋪平了道路。”

          2.支持范圍

          隨著 Spring Native 從 alpha 過渡到 beta,我認為弄清我們提供的支持范圍很重要。

          Alpha 是第一步,我們進行了大量試驗并完善了 Spring Native(以前稱為 Spring GraalVM Native)的體系結(jié)構(gòu),兼容性和對一系列樣本進行了重大更改的封裝。我們還報告了 GraalVM 團隊修復的許多問題,目的是縮小 JVM 與 Spring 應(yīng)用程序的本機之間的差距。

          雖然仍被認為是實驗性的,但 beta 意味著 Spring 現(xiàn)在為 Spring 生態(tài)系統(tǒng)的子集提供了對 native 的支持。如果項目正在使用受支持的依賴項,則可以在項目上進行嘗試;如果出現(xiàn)問題,則引發(fā)錯誤或提出請求請求。

          最新版本的 Spring Boot 2.x 次要版本的每個修補程序版本都會出現(xiàn)一個新版本的 Spring Native。Spring Native 0.9.0 支持 Spring Boot 2.4.3,Spring Native 0.9.1 支持 Spring Boot 2.4.4,等等。雖然會發(fā)生一些重大變化,但我們將記錄遷移路徑。文檔質(zhì)量達到了一個新的水平:參考文檔以 html 單頁或 pdf 的形式提供],并且我們發(fā)布了本機提示的 Javadoc 公共 API。

          3.start.spring.io

          Stéphane Nicoll 在對 http://start.spring.io 和相關(guān) IDE 的集成中,引入了對 Spring Native 的支持,所以現(xiàn)在這是探索如何使用 Spring 構(gòu)建原生應(yīng)用最簡單的方式。

          圖片

          添加 Spring Native 依賴后將會使用所需的依賴和插件自動配置 Maven 或 Gradle 項目,以便于支持原生。應(yīng)用代碼本身沒有變化。

          請檢查自動生成的 HELP.md 文件,該文件包含了有用的鏈接和文檔,同時它還能標記出來你是否選擇了一些在原生環(huán)境下不支持的依賴。

          4. 提前轉(zhuǎn)換

          本機不同于 JVM:類路徑在構(gòu)建時是固定的,例如需要反射或資源進行配置,沒有類延遲加載(可執(zhí)行文件中附帶的所有內(nèi)容在啟動時都加載到內(nèi)存中),并且可以調(diào)用一些代碼在構(gòu)建時。

          為了充分體現(xiàn)這些特性并允許 Spring 應(yīng)用程序在本機上以最大的兼容性和最小的占用空間運行,Brian Clozel 在此版本中引入了 Spring 提前(AOT)Maven 和 Gradle 插件,它們可以提前執(zhí)行您的應(yīng)用程序上的轉(zhuǎn)換。

          第一種轉(zhuǎn)換旨在基于由驚人的 Andy Clement 設(shè)計和實現(xiàn)的推理引擎來生成 GraalVM 本機配置(反射,資源,代理,本機映像選項),該引擎了解什么是 Spring 編程模型和基礎(chǔ)架構(gòu)。例如,對于每個由注釋的類@Controller,一個條目將被添加到生成的reflect-config.json文件中。

          無法推斷出某些本機配置,對于這些情況,我們引入了本機提示注釋(有關(guān)更多詳細信息,請參見 Javadoc),這使 Spring Native 可以比基于常規(guī) JSON 的本機圖像配置更可維護,類型安全和靈活地支持本機配置。例如同春本地 MySQL 驅(qū)動支持提供線索,讓一代機映像正確的條目reflect-config.json,resource-config.json以及native-image.properties如下:

          @NativeHint(  
              trigger = Driver.class,  
              options 
          "--enable-all-security-services",  
              types = @TypeHint(types = {  
                 FailoverConnectionUrl.class,  
                 FailoverDnsSrvConnectionUrl.class,  
                 // ...  
              }), resources 
          = {  
              @ResourceHint(patterns = "com/mysql/cj/TlsSettings.properties"),  
              @ResourceHint(patterns = "com.mysql.cj.LocalizedErrorMessages",  
                                isBundle = true)  
          })  
          public class MySqlHints implements NativeConfiguration {}  

          NativeConfiguration和其他動態(tài)配置機制允許更強大的和動態(tài)的配置生成,但要注意它們的 API 將在即將到來的版本演變了很多。

          Spring 開發(fā)人員還可以使用特定于應(yīng)用程序的本機提示直接注釋其@Configuration@SpringBootApplication類,例如,Book通過諸如RestTemplate或的編程 API 將類序列化為 JSON WebClient

          @TypeHint(types = Book.class)  
          @SpringBootApplication  
          public class WebClientApplication 
          {  
              // ...  
          }  

          與提前轉(zhuǎn)換系統(tǒng)一起使用時,最后一種可能是最強大的機制是使用 Spring Boot 部署模型與 GraalVM native 結(jié)合引入的封閉世界假設(shè)自動生成本機優(yōu)化代碼(源代碼和字節(jié)碼)的功能。圖像特征。這里的目標是通過使用本機圖像編譯器可以開箱即用地分析的代碼構(gòu)造來限制所需的額外本機配置的數(shù)量,以提高兼容性,并通過減少反射所需的配置數(shù)量來減少占用空間,資源或代理。

          一個具體的例子是各種形式的提前轉(zhuǎn)換spring.factories (Spring Boot 背后的擴展機制)到優(yōu)化的程序設(shè)計版本,該版本不需要反射,并且可以在應(yīng)用程序的上下文中過濾掉不必要的條目。

          這只是 Spring AOT 的開始,我們打算向[@Configuration功能配置中添加更強大的轉(zhuǎn)換,以通過提前分析來替換運行時反射,該提前分析將自動生成配置類,這些配置類將使用 lambda 和方法引用之類的程序化構(gòu)造。這將使 GraalVM 本機圖像編譯器可以立即了解 Spring 配置,而無需任何反射配置或*.class資源。

          要記住的一個關(guān)鍵點是,在使用 Spring Native 時,默認情況下在 JVM 上也會使用 AOT 生成的代碼,以允許您使用 JVM 允許的短反饋循環(huán)來行使“本機友好的代碼路徑”。您的調(diào)試器和所有常規(guī)工具。

          盡管 Spring AOT 轉(zhuǎn)換當前主要由本機需求驅(qū)動,但是其中許多不是本機特定的,并且可能其中一些可以提供優(yōu)化以在 JVM 上運行 Spring Boot 應(yīng)用程序。與此類主題一樣,重要的是數(shù)據(jù)驅(qū)動,以便我們測量效率和績效來決定我們的決策。

          我們可能會改進 IDE 的集成,現(xiàn)在確保在 IDE 中運行應(yīng)用程序之前,請先閱讀相關(guān)文檔以進行潛在的手動配置步驟,以更新生成的源代碼。

          5. 結(jié)論

          Spring 戰(zhàn)略要本地化有兩個主要支柱。第一個是使 Spring 基礎(chǔ)結(jié)構(gòu)適應(yīng)本機,而無需對數(shù)百萬個現(xiàn)有的 Spring Boot 應(yīng)用程序進行重大更改。其中包括我們在 Spring 頂級項目中所做的更改,以使其對本機友好,@NativeHint我們將在 Spring Native 中成熟的基礎(chǔ)架構(gòu)(例如)和 Spring AOT 構(gòu)建插件。

          第二個支柱比 Spring 本身更廣泛,native 是一個具有與 JVM 不同的特性的平臺,但是 Java 生態(tài)系統(tǒng)需要盡可能地一致,以避免兩種非常不同的 Java 風格,這將難以維護。這就是為什么我們與 GraalVM 團隊進行深入合作以縮小這一差距的原因。在接下來的幾個月中,這項合作將專注于為更廣泛的 JVM 生態(tài)系統(tǒng)改善本機測試和本機配置。

          轉(zhuǎn)自https://spring.io/blog/2021/03/11/announcing-spring-native-beta


          覺得本文對你有幫助?請分享給更多人

          關(guān)注「全棧開發(fā)者社區(qū)」加星標,提升全棧技能

          本公眾號會不定期給大家發(fā)福利,包括送書、學習資源等,敬請期待吧!

          如果感覺推送內(nèi)容不錯,不妨右下角點個在看轉(zhuǎn)發(fā)朋友圈或收藏,感謝支持。


          好文章,留言、點贊、在看和分享一條龍吧??

          瀏覽 37
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  黄色成人观看网站 | 无码无卡| 欧美三级视频网 | 黄色1级片a | 亚洲无码av在线观看 |