设为首页 加入收藏

TOP

SpringBoot3.x原生镜像-Native Image实践(一)
2023-08-26 21:10:57 】 浏览:58
Tags:SpringBoot3.x -Native Image 实践

前提

之前曾经写过一篇《SpringBoot3.x 原生镜像-Native Image 尝鲜》,当时SpringBoot处于3.0.0-M5版本,功能尚未稳定。这次会基于SpringBoot当前最新的稳定版本3.1.2详细分析Native Image的实践过程。系统或者软件版本清单如下:

组件 版本 备注
macOS Ventura 13.4.1(c) ARM架构
sdkman 5.18.2 JDK和各类SDK包管理工具
Liberica Native Image Kit 23.0.1.r17-nik 可以构建Native ImageJDK
SpringBoot 3.1.2 使用当前(2023-08-20)最新发布版
Maven 3.9.0 -

安装 sdkman

sdkman是一个轻量级、支持多平台的开源开发工具管理器,可以通过它安装任意主流发行版本(例如OpenJDKKonaGraalVM等等)的任意版本的JDK。通过下面的命令可以轻易安装sdkman:

curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk version

spring-boot-native-image-guide-1

可以通过sdk list java查看支持的JDK发行版本:

spring-boot-native-image-guide-2

通过shell命令sdk install java $Identifier就可以安装对应的JDK发行版。例如可以这样安装GraalVM-ce-17:

sdk install java 17.0.8-graalce

通过shell命令sdk uninstall java $Identifier可以卸载对应的JDK发行版。如果安装了多个版本或者多个发行版的JDK,可以通过shell命令sdk default java $Identifier去指定默认使用的JDK版本,例如:

sdk default java 17.0.8-graalce

可以通过shell命令sdk current或者sdk current java查看当前正在使用的SDK或者JDK版本。

spring-boot-native-image-guide-3

安装 Liberica NIK

Liberica Native Image Kitbellsoft出品的旨在创建高性能原生二进制(Native Binaries)基于JVM编写的应用的工具包,简称为Liberica NIKLiberica NIK本质就是把OpenJDK和多种其他工具包一起封装起来的JDK发行版,在Native Image功能应用过程,可以简单把它视为OpenJDK + GraalVM的结合体。可以通过sdk list java查看相应的JDK版本:

spring-boot-native-image-guide-4

这里选择JDK-17的版本进行安装:

sdk install java 23.0.1.r17-nik
# 这里最好把此JDK设置为当前系统的默认JDK,否则后面编译镜像时候会提示找不到GraalVM
sdk default java 23.0.1.r17-nik

安装完成后,通过java -version验证一下:

spring-boot-native-image-guide-5

编写 SpringBoot 应用

基于Maven新建一个SpringBoot应用,这里已经整理好了一份POM文件,实践过程可以直接用,如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>cn.vlts</groupId>
    <artifactId>spring-boot-native-image-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.2</version>
        <relativePath/>
    </parent>
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.version>3.11.0</maven.compiler.version>
        <maven.install.version>3.1.1</maven.install.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.tomcat.embed</groupId>
                    <artifactId>tomcat-embed-core</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.tomcat.embed</groupId>
                    <artifactId>tomcat-embed-websocket</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <depende
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Kafka+Fink 实战+工具类 下一篇Codespaces个性化后台服务器配置..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目