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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取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
    +關注

    關注

    20

    文章

    2989

    瀏覽量

    110357
  • 線程
    +關注

    關注

    0

    文章

    508

    瀏覽量

    20296
  • 鏡像
    +關注

    關注

    0

    文章

    178

    瀏覽量

    11267
  • SpringBoot
    +關注

    關注

    0

    文章

    175

    瀏覽量

    408

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

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

收藏 0人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Spring Boot如何實現異步任務

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

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

    早上看到一篇關于Spring Boot虛擬線程和Webflux性能對比的文章,覺得還不錯。內容較長,抓重點給大家介紹一下這篇文章的核心內容,方便大家快速閱讀。
    發表于 09-24 14:54 ?1300次閱讀
    <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 ?1412次閱讀
    使用<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 ?880次閱讀

    Spring Boot特有的實踐

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

    強大的Spring Boot 3.0要來了

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

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

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

    Spring Boot Web相關的基礎知識

    上一篇文章我們已經學會了如何通過IDEA快速建立一個Spring Boot項目,還介紹了Spring Boot項目的結構,介紹了項目配置文件pom.xml的組成部分,并且撰寫了我們
    的頭像 發表于 03-17 15:03 ?909次閱讀

    Spring干掉原生JVM?

    這意味著,除了 Spring 誕生以來就支持的 Java 虛擬機,官方添加了使用 GraalVM 將 Spring 應用編譯成原生
    的頭像 發表于 05-05 09:25 ?818次閱讀
    <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 ?918次閱讀

    Spring Boot啟動 Eureka流程

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

    Spring Boot 的設計目標

    什么是Spring Boot Spring BootSpring 開源組織下的一個子項目,也是 S
    的頭像 發表于 10-13 14:56 ?810次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> 的設計目標
    主站蜘蛛池模板: 国产精品久久久久久久AV下载 | 国产毛A片久久久久久无码 国产毛A片啊久久久久久A | 97精品国产亚洲AV超碰 | 国产成人综合高清在线观看 | 亚洲成A人片在线观看中文不卡 | 亚洲国产在线精品第二剧情不卡 | 亚洲欧美强伦一区二区另类 | 欧美日韩亚洲一区视频二区 | 天美传媒在线完整免费观看网站 | 亚瑟天堂久久一区二区影院 | 国产美女裸身网站免费观看视频 | 99国产热视频在线观看 | 国产一区内射最近更新 | 男人边吃奶边摸边做刺激情话 | 日韩欧美视频一区二区 | 999久久国产精品免费人妻 | 伊人久久大香线蕉综合电影 | 97国产视频 | 久久er国产精品免费观看2 | 色橹橹欧美在线观看视频高清 | 亚洲AV久久无码精品热九九 | 最近高清中文字幕无吗免费看 | 久久麻豆亚洲AV成人无码国产 | 女人高潮了拔出来了她什么感觉 | 妖精视频一区二区免费 | 亚洲国产日韩欧美在线a乱码 | 一个色夫导航 | 精品欧美小视频在线观看 | 亚洲青青草| 亚洲欧美自拍明星换脸 | 伊人久久综合热青草 | 99在线免费视频 | 久久国产加勒比精品无码 | 最近韩国日本免费观看mv免费版 | 在线观看插女生免费版 | chinese黑人第一次 | 久草色在线 | 中文字幕亚洲欧美在线视频 | 国产色婷婷亚洲99精品 | 欧洲馒头大肥p | 黄色三级在线 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品