在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

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

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

來源:medium.com/@egorponomarev

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

Spring Boot 3.2 支持:

Java 21

虛擬線程

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

Java 21

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

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

虛擬線程

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

GraalVM 和本機鏡像

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

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

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

嘗鮮一下

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

sdk install java 21.0.1-graal

sdk default java 21.0.1-graal

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

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

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

spring.threads.virtual.enabled:true

這個配置起到的作用:

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

調(diào)用@Async方法時,Spring MVC 的異步請求處理和 Spring WebFlux 的阻塞執(zhí)行支持現(xiàn)在將利用虛擬線程

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

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

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

代碼

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

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

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

2.異步任務(wù)

我們將在應(yīng)用程序啟動時調(diào)用其“run”方法

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

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

3.Scheduled 定時任務(wù)

一個簡單的方法,每 15 秒調(diào)用一次

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

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

讓我們運行我們的應(yīng)用程序:

./gradlewbootRun

并調(diào)用我們的端點

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 線程池。

根據(jù)JEP:預(yù)期行為:

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

現(xiàn)在讓我們在 GraalVM 上運行它。

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

./gradlewnativeCompile

./build/native/nativeComplie/app

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

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

結(jié)論

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

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

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2986

    瀏覽量

    107065
  • 線程
    +關(guān)注

    關(guān)注

    0

    文章

    507

    瀏覽量

    20101
  • 鏡像
    +關(guān)注

    關(guān)注

    0

    文章

    178

    瀏覽量

    11140
  • SpringBoot
    +關(guān)注

    關(guān)注

    0

    文章

    175

    瀏覽量

    330

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

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

收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    Spring Boot如何實現(xiàn)異步任務(wù)

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

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

    早上看到一篇關(guān)于Spring Boot虛擬線程和Webflux性能對比的文章,覺得還不錯。內(nèi)容較長,抓重點給大家介紹一下這篇文章的核心內(nèi)容,方便大家快速閱讀。
    發(fā)表于 09-24 14:54 ?1207次閱讀
    <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虛擬線程搭建靜態(tài)文件服務(wù)器

    Spring Boot 3.2 于 2023 年 11 月大張旗鼓地發(fā)布,標志著 Java 開發(fā)領(lǐng)域的一個關(guān)鍵時刻。這一突破性的版本引入了一系列革命性的功能。
    的頭像 發(fā)表于 01-09 09:34 ?1343次閱讀
    使用<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>搭建靜態(tài)文件服務(wù)器

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

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

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

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

    Spring Boot從零入門1 詳述

    在開始學(xué)習(xí)Spring Boot之前,我之前從未接觸過Spring相關(guān)的項目,Java基礎(chǔ)還是幾年前自學(xué)的,現(xiàn)在估計也忘得差不多了吧,寫Spring
    的頭像 發(fā)表于 12-10 22:18 ?825次閱讀

    Spring Boot特有的實踐

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

    強大的Spring Boot 3.0要來了

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

    用這4招 優(yōu)雅的實現(xiàn)Spring Boot異步線程間數(shù)據(jù)傳遞

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

    Spring Boot Web相關(guān)的基礎(chǔ)知識

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

    Spring干掉原生JVM?

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

    Spring Boot Actuator快速入門

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

    Spring Boot啟動 Eureka流程

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

    Spring Boot的啟動原理

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

    Spring Boot 的設(shè)計目標

    什么是Spring Boot Spring BootSpring 開源組織下的一個子項目,也是 S
    的頭像 發(fā)表于 10-13 14:56 ?772次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> 的設(shè)計目標
    主站蜘蛛池模板: 精品欧美一区二区三区在线观看 | www.你懂的 | 国产香港日本三级在线观看 | 日韩午夜片 | 人人草在线 | 狠狠色丁香婷婷综合视频 | 乡村乱人伦短小说 | 黄网站色在线视频免费观看 | 综合第一页 | 美女黄网站人色视频免费国产 | 国内自拍欧美 | 免费看男女做好爽好硬视频 | 性欧美暴力猛交69hd | 手机看片自拍自自拍日韩免费 | 人人爱天天操 | 人人爽人人看 | 亚洲婷婷综合网 | 9797色| 美女露出扒开尿口让男人桶 | 夜间视频在线观看 | 97影院理伦在线观看 | 丁香狠狠色婷婷久久综合 | 天天视频官网天天视频在线 | 国产h视频在线观看高清 | 日本三级成人中文字幕乱码 | 色偷偷综合网 | 天天搞天天干 | 狠狠色噜噜噜噜狠狠狠狠狠狠奇米 | 免费人成年短视频在线观看免费网站 | 国产精品久久久久国产精品三级 | 日本高清视频网站www | 久久精品国产福利国产琪琪 | 中文字幕一区二区三区四区 | 欧美在线不卡视频 | 黄色午夜剧场 | 成人激情综合网 | 最新版天堂中文在线官网 | 美女张开腿露出尿口让男人桶 | 五月天婷婷丁香 | 久久99久久精品97久久综合 | 色午夜视频 |