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

GraalVM和Spring Native嘗鮮一步步讓Springboot啟動(dòng)飛起來(lái)66ms完成啟動(dòng)

 更新時(shí)間:2023年02月01日 14:28:03   作者:LarryDpk  
GraalVM是高性能的JDK,支持Java/Python/JavaScript等語(yǔ)言,它可以讓Java變成二進(jìn)制文件來(lái)執(zhí)行,讓程序在任何地方運(yùn)行更快,這篇文章主要介紹了GraalVM和Spring Native嘗鮮一步步讓Springboot啟動(dòng)飛起來(lái)66ms完成啟動(dòng),需要的朋友可以參考下

簡(jiǎn)介

GraalVM是高性能的JDK,支持Java/Python/JavaScript等語(yǔ)言。它可以讓Java變成二進(jìn)制文件來(lái)執(zhí)行,讓程序在任何地方運(yùn)行更快。這或許是Java與Go的一場(chǎng)戰(zhàn)爭(zhēng)?

下載安裝GraalVM

安裝GraalVM

首先到官網(wǎng)下載,我是直接到GitHub Release Page下載的,請(qǐng)下載對(duì)應(yīng)的系統(tǒng)包,我下載如下:

graalvm-ce-java11-darwin-amd64-22.3.0.tar.gz

下載后解壓到某個(gè)目錄,我的如下:

/Users/larry/Software/graalvm-ce-java11-22.3.0

接著測(cè)試對(duì)應(yīng)的程序是否可以正常執(zhí)行,如java --version。在Mac上會(huì)報(bào)錯(cuò)如下:

is damaged and can’t be opened.

所以需要執(zhí)行下面語(yǔ)句:

$ sudo xattr -r -d com.apple.quarantine /Users/larry/Software/graalvm-ce-java11-22.3.0

注意修改對(duì)應(yīng)的目錄。

然后就可以執(zhí)行了:

$ ./java --version
openjdk 11.0.17 2022-10-18
OpenJDK Runtime Environment GraalVM CE 22.3.0 (build 11.0.17+8-jvmci-22.3-b08)
OpenJDK 64-Bit Server VM GraalVM CE 22.3.0 (build 11.0.17+8-jvmci-22.3-b08, mixed mode, sharing)

安裝native-image

這個(gè)工具用來(lái)把Java程序轉(zhuǎn)化為本地二進(jìn)制包,安裝如下:

$ ./gu install native-image
Downloading: Component catalog from www.graalvm.org
Processing Component: Native Image
Downloading: Component native-image: Native Image from github.com
Installing new component: Native Image (org.graalvm.native-image, version 22.3.0)

配置環(huán)境

配置環(huán)境變量

因?yàn)檫@個(gè)GraalVM還不夠成熟,我不想一直使用,就通過(guò)一個(gè)命令來(lái)切換,配置如下:

export GraalVM_HOME=/Users/larry/Software/graalvm-ce-java11-22.3.0/Contents/Home
alias switchOnGraalVM='export PATH=$GraalVM_HOME:$PATH'
alias switchOnGraalVMJavaHome='export JAVA_HOME=/Users/larry/Software/graalvm-ce-java11-22.3.0/Contents/Home'

alias switchOffGraalVM='export PATH=`echo $PATH | tr ":" "\n" | grep -v "graalvm" | tr "\n" ":"`'
alias switchOffGraalVMJavaHome='export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_212.jdk/Contents/Home'

配置IDEA

可以在IDEA上配置對(duì)應(yīng)的JDK,這樣開發(fā)的時(shí)候可以使用:

整合Spring Native與Spring Boot

普通Spring Boot程序

新來(lái)創(chuàng)建一個(gè)普通的Spring Boot Web程序,主要Java代碼如下:

@SpringBootApplication
@RestController
@RequestMapping("/")
public class SpringbootNativeGraalVMMain {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootNativeGraalVMMain.class, args);
    }

    @GetMapping("/hi-graalvm")
    public String hi() {
        return "This message is from Spring Boot built/run by GraalVM/Spring Native";
    }
}

啟動(dòng)時(shí)長(zhǎng)為1.193秒,還不錯(cuò)。我電腦還不錯(cuò)。

整合Spring Native

添加依賴:

<dependency>
  <groupId>org.springframework.experimental</groupId>
  <artifactId>spring-native</artifactId>
  <version>${spring-native.version}</version>
</dependency>

添加插件,這個(gè)插件非常重要,不然會(huì)有各種錯(cuò)誤:

<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.experimental</groupId>
      <artifactId>spring-aot-maven-plugin</artifactId>
      <version>0.11.5</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>
  </plugins>
</build>

添加以下插件來(lái)打包生成可執(zhí)行程序:

<profiles>
  <profile>
    <id>native</id>
    <properties>
      <repackage.classifier>exec</repackage.classifier>
      <native-buildtools.version>0.9.11</native-buildtools.version>
    </properties>
    <dependencies>
      <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-launcher</artifactId>
        <scope>test</scope>
      </dependency>
    </dependencies>
    <build>
      <plugins>
        <plugin>
          <groupId>org.graalvm.buildtools</groupId>
          <artifactId>native-maven-plugin</artifactId>
          <version>${native-buildtools.version}</version>
          <extensions>true</extensions>
          <executions>
            <execution>
              <id>test-native</id>
              <phase>test</phase>
              <goals>
                <goal>test</goal>
              </goals>
            </execution>
            <execution>
              <id>build-native</id>
              <phase>package</phase>
              <goals>
                <goal>build</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </build>
  </profile>
</profiles>

然后通過(guò)以下命令來(lái)build包,時(shí)間會(huì)長(zhǎng)很多,因?yàn)橐D(zhuǎn)化為二進(jìn)制可執(zhí)行文件:

$ mvn clean package -Pnative

兩分多鐘后完成,生成了一個(gè)可執(zhí)行文件,執(zhí)行如下:

$ target/spring-boot-native-graalvm

結(jié)果只花了0.066秒,即66毫秒就可以了,這也太快了吧。

訪問(wèn)接口也是正常的:

用Docker啟動(dòng)

先啟動(dòng)本地的Docker,然后添加依賴如下:

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

通過(guò)以下命令打出Docker鏡像:

mvn spring-boot:build-image

可能會(huì)花費(fèi)很長(zhǎng)時(shí)間,需要下載一些工具與鏡像。

打包成功后,多了鏡像:

$ docker images | grep graalvm
spring-boot-native-graalvm                               1.0-SNAPSHOT                                     d2c8d5c52a3c        42 years ago        85.8MB 

啟動(dòng)如下:

$ docker run --rm spring-boot-native-graalvm:1.0-SNAPSHOT -p 8080:8080

啟動(dòng)時(shí)間為59ms,更短了。

注意

  • 直接通過(guò)native-image命令來(lái)將jar包轉(zhuǎn)化為可執(zhí)行文件,如遇到各種問(wèn)題,勸大家放棄嘗試,這也是Spring Native存在的價(jià)值。別問(wèn)我為什么知道,哈哈~~
  • 要注意切換對(duì)應(yīng)的Java程序和Java Home,不然build包會(huì)報(bào)錯(cuò)。
  • 看Spring Native的包名是experimental的,離生產(chǎn)應(yīng)該還有距離,不要輕易在生產(chǎn)上用。

代碼

代碼請(qǐng)看GitHub: https://github.com/LarryDpk/pkslow-samples

到此這篇關(guān)于GraalVM和Spring Native嘗鮮一步步讓Springboot啟動(dòng)飛起來(lái)66ms完成啟動(dòng)的文章就介紹到這了,更多相關(guān)GraalVM和Spring Native內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mybatis映射文件操作存儲(chǔ)過(guò)程的實(shí)現(xiàn)

    mybatis映射文件操作存儲(chǔ)過(guò)程的實(shí)現(xiàn)

    本文主要介紹了mybatis映射文件操作存儲(chǔ)過(guò)程的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • SpringBoot利用Junit動(dòng)態(tài)代理實(shí)現(xiàn)Mock方法

    SpringBoot利用Junit動(dòng)態(tài)代理實(shí)現(xiàn)Mock方法

    說(shuō)到Spring Boot 單元測(cè)試主要有兩個(gè)主流集成分別是Mockito,Junit,這個(gè)各有特點(diǎn),在實(shí)際開發(fā)中,我想要的測(cè)試框架應(yīng)該是這個(gè)框架集成者,本文給大家介紹了SpringBoot利用Junit動(dòng)態(tài)代理實(shí)現(xiàn)Mock方法,需要的朋友可以參考下
    2024-04-04
  • Spring boot集成swagger2生成接口文檔的全過(guò)程

    Spring boot集成swagger2生成接口文檔的全過(guò)程

    這篇文章主要給大家介紹了關(guān)于Spring boot集成swagger2生成接口文檔的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 理解HashSet里為什么value不是null

    理解HashSet里為什么value不是null

    你有沒(méi)有想過(guò)Java中HashSet的Value為什么要存PRESENT而不是Null?帶著這個(gè)疑問(wèn)來(lái)看下邊的文章尋找答案吧
    2021-09-09
  • java 終止線程的4種方式小結(jié)

    java 終止線程的4種方式小結(jié)

    本文主要介紹了java終止線程的4種方式小結(jié),包含布爾標(biāo)志位,interrupt()方法,stop()方法和Thread.interrupt()方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • Java反射中java.beans包學(xué)習(xí)總結(jié)

    Java反射中java.beans包學(xué)習(xí)總結(jié)

    本篇文章通過(guò)學(xué)習(xí)Java反射中java.beans包,吧知識(shí)點(diǎn)做了總結(jié),并把相關(guān)內(nèi)容做了關(guān)聯(lián),對(duì)此有需要的朋友可以學(xué)習(xí)參考下。
    2018-02-02
  • 圖解Java經(jīng)典算法插入排序的原理與實(shí)現(xiàn)

    圖解Java經(jīng)典算法插入排序的原理與實(shí)現(xiàn)

    插入排序的算法描述是一種簡(jiǎn)單直觀的排序算法。其原理是通過(guò)構(gòu)建有序序列,對(duì)于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應(yīng)位置并插入。本文將用Java語(yǔ)言實(shí)現(xiàn)插入排序算法并進(jìn)行可視化,感興趣的可以了解一下
    2022-09-09
  • Java語(yǔ)言中的數(shù)據(jù)類型及其用途詳解

    Java語(yǔ)言中的數(shù)據(jù)類型及其用途詳解

    這篇文章主要介紹了Java語(yǔ)言中的數(shù)據(jù)類型及其用途,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • 深入Java萬(wàn)物之母Object類詳情

    深入Java萬(wàn)物之母Object類詳情

    這篇文章主要介紹了Java萬(wàn)物之母Object類詳情,Object類,它是所有類的默認(rèn)父類 ,子類不用使用extends關(guān)鍵字繼承它,不管是JDK中的類,還是自定義的類
    2022-06-06
  • linux配置java環(huán)境變量詳細(xì)過(guò)程

    linux配置java環(huán)境變量詳細(xì)過(guò)程

    這篇文章主要介紹了linux配置java環(huán)境變量詳細(xì)過(guò)程,需要的朋友可以參考下
    2015-09-09

最新評(píng)論

琼中| 红安县| 元朗区| 枣强县| 蓝山县| 克什克腾旗| 禹州市| 西林县| 漠河县| 武陟县| 竹溪县| 青河县| 乌兰浩特市| 淅川县| 鹤壁市| 临朐县| 开江县| 安西县| 独山县| 中江县| 团风县| 兴城市| 彰化市| 都安| 乾安县| 涞源县| 和田市| 郯城县| 禹城市| 贺兰县| 乳山市| 焉耆| 雷波县| 天气| 黄平县| 清水河县| 长兴县| 莱芜市| 万州区| 仪陇县| 新巴尔虎右旗|