色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Spring Boot 3.2支持虛擬線程和原生鏡像

jf_ro2CN3Fa ? 來源:medium.com ? 2023-11-30 16:22 ? 次閱讀

來源:medium.com/@egorponomarev

Spring Boot 3.2 前幾日發布,讓我們用 Java 21、GraalVM 和虛擬線程來嘗試一下。

Spring Boot 3.2 支持:

Java 21

虛擬線程

原生鏡像(自 2022 年 11 月 Spring Boot 3.0 發布以來,Spring Boot 已在生產環境中支持 GraalVM 原生鏡像)

Java 21

我們期待 2023 年 9 月 19 日發布的 Java 21,Spring Boot 3.2 已經做到完全支持了。

正如所聲明的那樣,Java 21 提供了數千項性能、穩定性和安全性改進,包括平臺增強功能,可幫助開發人員提高生產力并推動整個組織的創新和增長。

虛擬線程

更重要的更新之一是虛擬線程,這是 Project Loom 提供的功能。我們不打算深入細節,官方 JEP 提供了很好的解釋:

GraalVM 和本機鏡像

GraalVM 是一種高性能 JDK,可以使用替代的即時 (JIT) 編譯器來加快 Java 和基于 JVM 的應用程序的性能。

Native Image 是一種提前將 Java 代碼編譯為獨立可執行文件(稱為本機映像)的技術。該可執行文件包括應用程序類、其依賴項中的類、運行時庫類以及來自 JDK 的靜態鏈接本機代碼。

它不在 Java VM 上運行,但包含來自不同運行時系統的必要組件,如內存管理、線程調度等。與 JVM 相比,生成的程序具有更快的啟動時間和更低的運行時內存開銷。

嘗鮮一下

讓我們從安裝 Java 21.0.1 graal 開始,最簡單的方法是使用SDKMAN 并將其指定為您機器的默認 Java 版本:

sdk install java 21.0.1-graal

sdk default java 21.0.1-graal

另一種安裝方法是手動下載

我們將使用Spring Initializr頁面創建一個新的Spring Boot項目,使用 Spring Boot 3.2.0、Java 21、Gradle-Groovy以及Spring Web和GraalVM本地支持依賴項。

要在 Spring Boot 3.2 中啟用虛擬線程,我們只需在 application.yml 或 application.properties 文件中設置一個屬性:

spring.threads.virtual.enabled:true

這個配置起到的作用:

Tomcat 將使用虛擬線程來處理 HTTP 請求。這意味著處理 Web 請求的應用程序代碼(例如控制器中的方法)將在虛擬線程上運行。

調用@Async方法時,Spring MVC 的異步請求處理和 Spring WebFlux 的阻塞執行支持現在將利用虛擬線程

標記有@Scheduled的方法將在虛擬線程上運行

因此,我們將嘗試使用這 3 個集成來實現虛擬線程。

此外,一些特定的集成將在虛擬線程上工作,例如 RabbitMQ/Kafka 監聽器,以及 Spring Data Redis/Apache pulsar 相關的集成。但這些集成超出了本文的范圍,有興趣的可以參考 Spring Boot 3.2 官方示例。

代碼

1.對于 Tomcat 傳入的 HTTP 請求,我們創建一個簡單的控制器:

@RestController
@RequestMapping("/test")
publicclassTestController{
privatestaticfinalLoggerlog=LoggerFactory.getLogger(TestController.class);

@GetMapping
publicvoidtest(){
log.info("Restcontrollermethodhasbeencalled{}",Thread.currentThread());
}
}

2.異步任務

我們將在應用程序啟動時調用其“run”方法

@Component
publicclassAsyncTaskExecutorService{
privatestaticfinalLoggerlog=LoggerFactory.getLogger(AsyncTaskExecutorService.class);

@Async
publicvoidrun(){
log.info("Asynctaskmethodhasbeencalled{}",Thread.currentThread());
}
}

3.Scheduled 定時任務

一個簡單的方法,每 15 秒調用一次

@Component
publicclassSchedulerService{
privatestaticfinalLoggerlog=LoggerFactory.getLogger(SchedulerService.class);

@Scheduled(fixedDelayString="15000")
publicvoidrun(){
log.info("Scheduledmethodhasbeencalled{}",Thread.currentThread());
}
}

讓我們運行我們的應用程序:

./gradlewbootRun

并調用我們的端點

curl—位置—請求GET'localhost:8085/test'

我們得到什么:

StartingAppApplicationusingJava21.0.1withPID38126
StartedAppApplicationin1.131seconds(processrunningfor1.491)
AsynctaskmethodhasbeencalledVirtualThread[#52,task-1]/runnable@ForkJoinPool-1-worker-5
ScheduledmethodhasbeencalledVirtualThread[#46,scheduling-1]/runnable@ForkJoinPool-1-worker-1
RestcontrollermethodhasbeencalledVirtualThread[#62,tomcat-handler-0]/runnable@ForkJoinPool-1-worker-1
ScheduledmethodhasbeencalledVirtualThread[#46,scheduling-1]/runnable@ForkJoinPool-1-worker-1

我們可以看到我們的方法的日志鏈接到公共 ForkJoinPool 線程池。

根據JEP:預期行為:

JDK 的虛擬線程調度程序是一個工作竊取的 ForkJoinPool,它以 FIFO 模式運行。調度程序的并行度是可用于調度虛擬線程的平臺線程的數量。

現在讓我們在 GraalVM 上運行它。

首先,我們需要構建一個 GraalVM 本機映像:(此命令可能需要幾分鐘)然后運行:(使用您的應用程序的名稱而不是“app”)

./gradlewnativeCompile

./build/native/nativeComplie/app

它也可以工作,并且啟動時間要快得多,這符合聲明的“與 JVM 相比,生成的程序具有更快的啟動時間和更低的運行時內存開銷”。

在這里您可以找到包含本文中使用的代碼的存儲庫來源

結論

Spring Boot 3.2 是我們一直在等待的東西!具有虛擬線程的本機映像允許我們編寫能夠提供與 Go 類似級別的性能和可擴展性的代碼,從而保持 JVM 的強大生態系統。

但是,您必須考慮到并非所有庫都已采用其代碼來與虛擬線程正常工作(在大多數情況下,它正在用 ReentrantLock 替換“synchronize”塊),您應該小心虛擬線程將使用的邏輯。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    19

    文章

    2966

    瀏覽量

    104702
  • 線程
    +關注

    關注

    0

    文章

    504

    瀏覽量

    19675
  • 鏡像
    +關注

    關注

    0

    文章

    164

    瀏覽量

    10707
  • SpringBoot
    +關注

    關注

    0

    文章

    173

    瀏覽量

    177

原文標題:Spring Boot 3.2 正式發布,開箱即用的虛擬線程和 GraalVM,嘗鮮一下!

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Spring Boot如何實現異步任務

    ,用來告訴 Spring 這個方法是一個異步方法,Spring 會將這個方法的執行放在異步線程中進行。使用 @Async 注解需要滿足以下條件: 需要在 Spring
    的頭像 發表于 09-30 10:32 ?1436次閱讀

    Spring Boot虛擬線程和Webflux性能對比

    早上看到一篇關于Spring Boot虛擬線程和Webflux性能對比的文章,覺得還不錯。內容較長,抓重點給大家介紹一下這篇文章的核心內容,方便大家快速閱讀。
    發表于 09-24 14:54 ?921次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b><b class='flag-5'>虛擬</b><b class='flag-5'>線程</b>和Webflux性能對比

    使用Spring Boot 3.2虛擬線程搭建靜態文件服務器

    Spring Boot 3.2 于 2023 年 11 月大張旗鼓地發布,標志著 Java 開發領域的一個關鍵時刻。這一突破性的版本引入了一系列革命性的功能。
    的頭像 發表于 01-09 09:34 ?1120次閱讀
    使用<b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> <b class='flag-5'>3.2</b><b class='flag-5'>虛擬</b><b class='flag-5'>線程</b>搭建靜態文件服務器

    請問6455支持對16位flash操作嗎?

    求教!最近在使用6455,EMIF的CE3空間接了16位的flash用來boot程序。第一個問題6455支持對16位flash操作嗎?我用的異步16位通信方式,不能正確操作flash,我從網上沒有
    發表于 01-22 07:42

    CH9121的虛擬串口軟件在哪?CH9120支持嗎?

    CH9121的虛擬串口軟件在哪?CH9120支持
    發表于 10-17 06:45

    Spring Boot從零入門1 詳述

    在開始學習Spring Boot之前,我之前從未接觸過Spring相關的項目,Java基礎還是幾年前自學的,現在估計也忘得差不多了吧,寫Spring
    的頭像 發表于 12-10 22:18 ?632次閱讀

    Spring Boot特有的實踐

    Spring Boot是最流行的用于開發微服務的Java框架。在本文中,我將與你分享自2016年以來我在專業開發中使用Spring Boot所采用的最佳實踐。這些內容是基于我的個人經驗
    的頭像 發表于 09-29 10:24 ?901次閱讀

    強大的Spring Boot 3.0要來了

    和 Bugfix。 Spring Boot 3.0 的開發工作始于實驗性的 Spring Native,旨在為 GraalVM 原生鏡像提供
    的頭像 發表于 10-31 11:17 ?1857次閱讀

    用這4招 優雅的實現Spring Boot異步線程間數據傳遞

    Spring Boot 自定義線程池實現異步開發相信看過陳某的文章都了解,但是在實際開發中需要在父子線程之間傳遞一些數據,比如用戶信息,鏈路信息等等
    的頭像 發表于 01-30 10:40 ?1131次閱讀

    MEXE02支持軟件介紹

    MEXE02支持軟件介紹
    的頭像 發表于 03-09 15:16 ?2058次閱讀
    MEXE02<b class='flag-5'>支持</b>軟件介紹

    Spring干掉原生JVM?

    這意味著,除了 Spring 誕生以來就支持的 Java 虛擬機,官方添加了使用 GraalVM 將 Spring 應用編譯成原生
    的頭像 發表于 05-05 09:25 ?552次閱讀
    <b class='flag-5'>Spring</b>干掉<b class='flag-5'>原生</b>JVM?

    Spring Boot Actuator快速入門

    不知道大家在寫 Spring Boot 項目的過程中,使用過 Spring Boot Actuator 嗎?知道 Spring
    的頭像 發表于 10-09 17:11 ?633次閱讀

    Spring Boot啟動 Eureka流程

    在上篇中已經說過了 Eureka-Server 本質上是一個 web 應用的項目,今天就來看看 Spring Boot 是怎么啟動 Eureka 的。 Spring Boot 啟動 E
    的頭像 發表于 10-10 11:40 ?887次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>啟動 Eureka流程

    Spring Boot的啟動原理

    可能很多初學者會比較困惑,Spring Boot 是如何做到將應用代碼和所有的依賴打包成一個獨立的 Jar 包,因為傳統的 Java 項目打包成 Jar 包之后,需要通過 -classpath 屬性
    的頭像 發表于 10-13 11:44 ?643次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>的啟動原理

    Spring Boot 的設計目標

    什么是Spring Boot Spring BootSpring 開源組織下的一個子項目,也是 S
    的頭像 發表于 10-13 14:56 ?580次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> 的設計目標
    主站蜘蛛池模板: 欧美视频精品一区二区三区| 清晨紧湿爱运动h高h| 日本妈妈在线观看中文字幕| 忘忧草日本在线社区WWW电影| 亚洲午夜电影| 99国产精品白浆在线观看免费| 国产成人精品自拍| 久久久国产精品免费A片3D| 任你躁精品一区二区三区| 亚洲精品无码不卡在线播HE| 97视频在线免费| 黑人BBCVIDEOS极品| 轻轻挺进女教师的身体| 伊人久久一本| 俄罗斯摘花| 美女教师朝桐光在线播放| 先锋资源久久| WW.国产人妻人伦精品| 黄 色 网 站 免 费 涩涩屋| 青柠在线观看视频在线高清完整 | 国产精品亚洲精品久久国语| 乱淫67194| 亚洲第一综合天堂另类专| freehd另类xxxx喷水| 交换娇妻呻吟声不停中文字幕 | 欧美夜夜噜2017最新| 一本二卡三卡四卡乱码麻豆| 国产69精品久久久久妇女| 免费视频国产在线观看网站| 亚洲成人mv| 成人a视频在线观看| 久久综合视频网站| 亚洲第一页视频| 俄罗斯性xxxx| 欧美 亚洲 有码中文字幕| 亚洲综合免费视频| 国产伦精品一区二区免费 | 欧洲美女高清一级毛片| 一起洗澡的老师免费播放| 国产精品无码AV天天爽人妻蜜桃| 啪啪漫画无遮挡全彩h同人 |