日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring官宣,干掉原生 JVM!硬气啊!

發布時間:2024/3/13 javascript 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring官宣,干掉原生 JVM!硬气啊! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

來源│spring.io/blog/2021/03/11/announcing-spring-native-beta

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

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

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

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

使用簡單mvn spring-boot:build-image或gradle bootBuildImage命令,您可以生成一個優化的容器映像,該映像將包含一個最小的OS層和一個小的本機可執行文件,該映像僅隨附JDK,Spring以及您在應用程序中使用的依賴項中的必需位。請參閱下面的示例,其中包含50MB可執行文件的最小容器映像,其中包含Spring Boot,Spring MVC,Jackson,Tomcat,JDK和應用程序。

這種原生方式,在很多場景下都會對 Spring 應用產生價值:

  • 具有Spring Cloud功能的無服務器

  • 以更便宜和更可持續的方式托管Spring微服務

  • 非常適合VMware Tanzu等Kubernetes平臺

  • 想要創建最佳的容器映像來打包您的Spring應用程序和服務

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

1. ?團隊協作

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

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

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

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

2.?支持范圍

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

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

雖然仍被認為是實驗性的,但beta意味著Spring現在為Spring生態系統的子集提供了對native的支持。如果項目正在使用受支持的依賴項,則可以在項目上進行嘗試;如果出現問題,則引發錯誤或提出請求請求。最新版本的Spring Boot 2.x次要版本的每個修補程序版本都會出現一個新版本的Spring Native。Spring Native 0.9.0支持Spring Boot 2.4.3,Spring Native 0.9.1支持Spring Boot 2.4.4,等等。雖然會發生一些重大變化,但我們將記錄遷移路徑。文檔質量達到了一個新的水平:參考文檔以html單頁或pdf的形式提供,并且發布了本機提示的Javadoc公共API。

3.start.spring.io

Stéphane Nicoll 在對 http://start.spring.io 和相關 IDE 的集成中,引入了對 Spring Native 的支持,所以現在這是探索如何使用 Spring 構建原生應用最簡單的方式。

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

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

4. 提前轉換

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

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

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

無法推斷出某些本機配置,對于這些情況,我們引入了本機提示注釋(有關更多詳細信息,請參見Javadoc),這使Spring Native可以比基于常規JSON的本機圖像配置更可維護,類型安全和靈活地支持本機配置。例如同春本地MySQL驅動支持提供線索,讓一代機映像正確的條目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和其他動態配置機制允許更強大的和動態的配置生成,但要注意它們的API將在即將到來的版本演變了很多。

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

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

與提前轉換系統一起使用時,最后一種可能是最強大的機制是使用Spring Boot部署模型與GraalVM native結合引入的封閉世界假設自動生成本機優化代碼(源代碼和字節碼)的功能。圖像特征。這里的目標是通過使用本機圖像編譯器可以開箱即用地分析的代碼構造來限制所需的額外本機配置的數量,以提高兼容性,并通過減少反射所需的配置數量來減少占用空間,資源或代理。一個具體的例子是各種形式的提前轉換spring.factories?(Spring Boot背后的擴展機制)到優化的程序設計版本,該版本不需要反射,并且可以在應用程序的上下文中過濾掉不必要的條目。

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

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

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

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

5. 結論

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

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

回復?【Java】獲取java相關的視頻教程和資料回復?【SpringCloud】獲取SpringCloud相關多的學習資料 回復?【PDF】獲取2021java相關面試題教程 回復?【加群】即可加入java學習交流研發部相關的技術交流群
  • 臥槽!你竟然連SpringBoot中的線程池都不會用。。。

  • 顛覆認知 - MySQL數字類型如何選擇?

  • 字節跳動一面:i++ 是線程安全的嗎?

  • 阿里一面:如何保障消息100%投遞成功、消息冪等性?

  • SpringBoot 中實現跨域的5種方式

  • 速看!詳細介紹 IOC 和 DI

  • 京東電話面:說說你對Spring事務傳播屬性的理解?

看完本文有收獲?請轉發分享給更多人

請長按二維碼,關注?Java大數據修煉之道.

推薦程序員必備公眾號?

Java大數據修煉之道

公眾號:

gh_9119f24d3793

推薦理由:

在這里,我們分享程序員相關技術,職場生活,行業熱點資訊。不定期還會分享IT趣文和趣圖。這里屬于我們程序員自己的生活,工作和娛樂空間。

?▼長按下方↓↓↓二維碼識別關注

關注?java大數據修煉之道

?? ?每天學習java技術你想學的Java知識這里都有

點「在看」的人都漲薪了哦

總結

以上是生活随笔為你收集整理的Spring官宣,干掉原生 JVM!硬气啊!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。