最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Native 基礎環(huán)境搭建過程

 更新時間:2024年02月22日 16:23:00   作者:程序猿進階  
Spring?Native可以通過GraalVM將Spring應用程序編譯成原生鏡像,提供了一種新的方式來部署Spring應用,本文介紹Spring?Native基礎環(huán)境搭建,感興趣的朋友跟隨小編一起看看吧

一、Spring Native 是什么

Spring Native可以通過GraalVMSpring應用程序編譯成原生鏡像,提供了一種新的方式來部署Spring應用。與Java虛擬機相比,原生鏡像可以在許多場景下降低工作負載,包括微服務,函數(shù)式服務,非常適合容器和Kubernetes。使用原生鏡像有明顯優(yōu)勢,如快速啟動,提高峰值性能以及降低內(nèi)存消耗。Spring Native支持JavaKotlin。

這個項目的目標是尋找Spring JVM的替代方案,提供一個能將應用程序打包,并運行在輕量級容器的方案。期望能夠在Spring Native中支持所有的Spring應用程序(幾乎不用修改代碼)。

原生(本地)鏡像是一種將Java代碼構(gòu)建為獨立可執(zhí)行文件的技術(shù)。該可執(zhí)行文件包括應用程序類、其依賴項的類、運行時庫類以及來自JDK的靜態(tài)鏈接本地代碼。JVM被打包到原生鏡像中,因此在目標系統(tǒng)上不需要任何Java運行環(huán)境,但構(gòu)建產(chǎn)物依賴于平臺。因此,需要為每個支持的目標系統(tǒng)進行一次構(gòu)建,在使用Docker等容器技術(shù)時會更加簡單,將容器構(gòu)建為一個目標系統(tǒng),可以部署到任何Docker運行時。

二、優(yōu)點

Spring Native的基礎是GraalVM,而GraalVM是使用Java靜態(tài)編譯,將Java字節(jié)碼編譯為匯編代碼,即二進制native程序,他摒棄了JVM,這是成就它所有優(yōu)點的根本原因。
【1】編譯出來的原生Spring應用可以作為一個獨立的可執(zhí)行文件進行部署(不需要安裝JVM
【2】幾乎瞬時的啟動(一般小于100毫秒)
【3】瞬時的峰值性能
【4】更低的資源消耗

三、局限性

GraalVM項目也有一些缺點和權(quán)衡,希望隨著時間的推移有所改進:
【1】構(gòu)建本地映像是一個繁重的過程,比JVM更長的構(gòu)建時間;
【2】相比于傳統(tǒng)的Java運行方式,運行時優(yōu)化不足;
【3】不能直接支持反射、動態(tài)代理等動態(tài)特性;
【4】現(xiàn)在處于實驗階段,生態(tài)比較少;

四、原生鏡像(native image)和常規(guī) JVM 程序的區(qū)別

【1】在構(gòu)建時會從主入口點對應用程序進行靜態(tài)分析。
【2】在構(gòu)建時會移除未使用的代碼。
【3】需要配置反射、動態(tài)代理等。
【4】類路徑ClassPath在構(gòu)建時就已經(jīng)確定。
【5】沒有類延遲加載:可執(zhí)行文件中所有的內(nèi)容都會在啟動時加載到內(nèi)存中。
【6】在構(gòu)建時就運行了一些代碼。
【7】構(gòu)建原生鏡像還存在一些局限性。
【8】一些Java切面類的特性未得到完全支持。

五、前置條件:GraalVM

通用遞歸應用和算法語言虛擬機Graal VM是一個高性能的JDK發(fā)行版,專為Java和其他JVM語言編寫,同時支持JavaScript、RubyPython和其他幾種語言。GraalVM的多語言能力使得在一個應用程序中混合使用多種編程語言成為可能,同時消除了不同語言間互相調(diào)用的成本。它提供了一個原生鏡像生成器Native Image builder,這是一個從Java應用中生成原生代碼并將其與VM一起打包成獨立可執(zhí)行文件的工具。Spring Boot MavenGradle Plugin除了少數(shù) 例外情況(Mockito目前不支持原生測試),正式支持該工具。

Ahead-Of-Time(AOT)編譯是將高級Java代碼編譯成本地可執(zhí)行代碼的過程。通常由JVM的即時編譯器JIT在運行時進行編譯,這樣可以在執(zhí)行應用程序時進行觀察和優(yōu)化。在AOT編譯的情況下,這一優(yōu)勢就不復存在了。

通常,在進行AOT(Ahead-of-Time)編譯之前,可以選擇進行一個單獨的步驟,稱為AOT處理,即從代碼中收集元數(shù)據(jù)并提供給AOT編譯器。將這兩個步驟分開是有意義的,因為AOT處理可以是針對特定框架的,而AOT編譯器更加通用。下面的圖片給出了一個概覽:

Java平臺的另一個特點是,只需將JAR放入類路徑,就能在目標系統(tǒng)上進行擴展。通過啟動時的反射和注解掃描,就能在應用中獲得擴展行為。不幸的是,這會減慢啟動時間,而且不會帶來任何好處,尤其是對于云原生應用,因為在云原生應用中,服務器運行時和Java基類都打包到了JAR中。因此,可以放棄這一功能,然后可以使用閉環(huán)優(yōu)化Closed World Optimization來構(gòu)建應用。

詳細信息參考:JIT即時編譯與AOT提前編譯; GraalVM :官網(wǎng)

六、Spring Native 基礎環(huán)境搭建

【1】必須安裝Docker 可以參考 Windows10 Docker Desktop安裝 ,同時注意要能夠以非root用戶啟動和運行??梢酝ㄟ^使用docker run hello-world (不包含sudo)命令檢查Docker daemon是否可用。
【2】快速創(chuàng)建一個SpringBoot項目。
【3】添加Spring Native依賴: 必須在項目中手動加入和配置。對于AOT處理,有一個單獨的MavenGradle插件,它并沒有合并到Spring Boot插件中。org.springframework.experimental:spring-native提供了native配置的API,例如@NativeHint這些Spring運行成native image的注解類。

<dependency>
    <groupId>org.springframework.experimental</groupId>
    <artifactId>spring-native</artifactId>
    <version>0.9.1</version>
</dependency>

【4】添加Spring AOT插件 Spring AOT插件執(zhí)行代碼的提前轉(zhuǎn)換,有助于改善原生鏡像的占用空間和修復native image的兼容性。

<plugin>
    <groupId>org.springframework.experimental</groupId>
    <artifactId>spring-aot-maven-plugin</artifactId>
    <version>0.9.1</version>
    <executions>
        <execution>
            <id>test-generate</id>
            <goals>
                <goal>test-generate</goal>
            </goals>
        </execution>
        <execution>
            <id>generate</id>
            <goals>
                <goal>generate</goal>
            </goals>
        </execution>
    </executions>
</plugin>

【5】開啟native image支持 Spring BootSpring Boot Buildpacks support可以將Spring Boot應用程序打包成一個容器。native image buildpack可以通過BP_NATIVE_IMAGE環(huán)境變量開啟。

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <image>
            <builder>paketobuildpacks/builder:tiny</builder>
            <env>
                <BP_NATIVE_IMAGE>true</BP_NATIVE_IMAGE>
            </env>
        </image>
    </configuration>
</plugin>

【6】構(gòu)建本地應用程序: 通過此命令,可以創(chuàng)建一個使用GraalVM native image compiler構(gòu)建的Linux容器,默認情況下,這個鏡像是在本地。

mvn spring-boot:build-image

【7】原生鏡像構(gòu)建:Profile將在打包階段調(diào)用構(gòu)建中的native-image編譯器。通過在Maven package命令中提供native Profile,就可以構(gòu)建原生鏡像了:mvn clean package -Pnative

<profiles>
    <profile>
        <id>native</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.graalvm.buildtools</groupId>
                    <artifactId>native-maven-plugin</artifactId>
                    <version>0.9.17</version>
                    <executions>
                        <execution>
                            <id>build-native</id>
                            <goals>
                                <goal>build</goal>
                            </goals>
                            <phase>package</phase>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <classifier>exec</classifier>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

到此這篇關(guān)于Spring Native 解放 JVM的文章就介紹到這了,更多相關(guān)Spring Native 解放 JVM內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Spring Security集成手機驗證碼登錄功能實現(xiàn)

    使用Spring Security集成手機驗證碼登錄功能實現(xiàn)

    本文詳細介紹了如何利用SpringSecurity來實現(xiàn)手機驗證碼的注冊和登錄功能,在登錄過程中,同樣需通過驗證碼進行驗證,文章還提供了相關(guān)的代碼實現(xiàn)
    2024-10-10
  • Java編程實現(xiàn)對十六進制字符串異或運算代碼示例

    Java編程實現(xiàn)對十六進制字符串異或運算代碼示例

    這篇文章主要介紹了Java編程實現(xiàn)對十六進制字符串異或運算代碼示例,簡述了異或運算以及具體實例,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Java如何判斷字符串是否為空或者null問題

    Java如何判斷字符串是否為空或者null問題

    這篇文章主要介紹了Java如何判斷字符串是否為空或者null問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • Spring Boot的應用啟動與關(guān)閉的方法

    Spring Boot的應用啟動與關(guān)閉的方法

    本篇文章主要介紹了Spring Boot的應用啟動與關(guān)閉的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • 使用java連接Redis,Maven管理操作

    使用java連接Redis,Maven管理操作

    這篇文章主要介紹了使用java連接Redis,Maven管理操作,具有很好的參考價值,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • 一篇超詳細的Spring Boot對jdbc支持的文章

    一篇超詳細的Spring Boot對jdbc支持的文章

    JdbcTemplate 是在JDBC API基礎上提供了更抽象的封裝,并提供了基于方法注解的事務管理能力。 通過使用SpringBoot自動配置功能并代替我們自動配置beans,下面給大家介紹spring boot中使用JdbcTemplate相關(guān)知識,一起看看吧
    2021-07-07
  • Java synchronized從使用到底層鎖升級機制詳解

    Java synchronized從使用到底層鎖升級機制詳解

    本文深入解析Java中synchronized的底層機制與鎖升級過程,文章從基礎用法入手,區(qū)分實例鎖、類鎖和代碼塊鎖的使用場景及常見誤區(qū),感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • Java實現(xiàn)獲取cpu、內(nèi)存、硬盤、網(wǎng)絡等信息的方法示例

    Java實現(xiàn)獲取cpu、內(nèi)存、硬盤、網(wǎng)絡等信息的方法示例

    這篇文章主要介紹了Java實現(xiàn)獲取cpu、內(nèi)存、硬盤、網(wǎng)絡等信息的方法,涉及java使用第三方jar包針對本機硬件的cpu、內(nèi)存、硬盤、網(wǎng)絡信息等的讀取相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06
  • spring mvc @PathVariable綁定URI模板變量值方式

    spring mvc @PathVariable綁定URI模板變量值方式

    這篇文章主要介紹了spring mvc @PathVariable綁定URI模板變量值方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Spring的FactoryBean<Object>接口示例代碼

    Spring的FactoryBean<Object>接口示例代碼

    FactoryBean是Spring框架中的一個接口,用于創(chuàng)建和管理Bean對象,它的作用是將Bean的創(chuàng)建過程交給FactoryBean實現(xiàn)類來完成,而不是直接由Spring容器來創(chuàng)建,本文給大家介紹Spring的FactoryBean<Object>接口,感興趣的朋友一起看看吧
    2023-11-11

最新評論

安宁市| 阿拉善左旗| 昌宁县| 朝阳县| 临洮县| 买车| 银川市| 体育| 龙游县| 柳林县| 西贡区| 石台县| 平顺县| 东莞市| 黔江区| 南开区| 迁西县| 鄯善县| 威海市| 上栗县| 宁明县| 彭阳县| 嘉善县| 察哈| 宜宾县| 河源市| 淅川县| 泌阳县| 开平市| 桃园市| 丰原市| 河源市| 金溪县| 贵州省| 桂平市| 卓资县| 溧阳市| 乐业县| 永嘉县| 祁阳县| 旬阳县|