Graalvm安装配置与springboot3.0尝鲜

news2025/1/17 16:34:22

Graalvm安装配置与springboot3.0尝鲜

在这里插入图片描述
在这里插入图片描述

Spring 团队一直致力于 Spring 应用程序的原生映像支持已有一段时间了。经过3 +年的孵化春季原生Spring Boot 2 的实验性项目,原生支持将在 Spring Framework 6 和 Spring Boot 3 中正式发布!

安装Graalvm

由于spring-boot3.0仅支持22.3版本,此处我们选择这个版本作为演示

Release GraalVM Community Edition 22.3.0 · graalvm/graalvm-ce-builds (github.com)

image-20221130150340996

选择对应版本下载即可,此处我选择的是windows 的java 17版本

解压之后我们可以得到这样的目录结构

前置路径\graalvm-ce-java17-22.3.0

image-20221130150524482

配置Graalvm环境变量

配置GRAALVM_HOME变量到你的解压路径

image-20221130150648155

Path中添加%GRAALVM_HOME%\bin

image-20221130150848751

确定保存

安装成功

打开控制面板输入命令Java -version

image-20221130151006878

可以看到显示了我们刚刚安装的GraalVM的信息

输入命令gu

image-20221130151120759

可以看见gu命令也能正常使用

安装native-image

控制台输入命令gu install native-image即可

但是可能会出现以下错误

image-20221130151315638

解决方案

在github上下载对应版本的native-image安装包进行本地安装

还是熟悉的地址:

Release GraalVM Community Edition 22.3.0 · graalvm/graalvm-ce-builds (github.com)

下拉,找到与你版本对应的native-image安装包

image-20221130151500003

控制台输入命令gu install -L 你的下载位置如图所示

image-20221130151626018

安装成功

控制台输入gu list如图所示

image-20221130151715833

可以看见native-image的版本信息,说明安装成功

配置msvc环境

安装vs2019及以上版本

image-20221130152533185

安装时确保勾选了以上两个选项

环境变量

在Path中配置D:\vs2022\VC\Tools\MSVC\14.29.30133\bin\HostX64\x64D:\vs2022\VC\Tools\MSVC\14.29.30133\bin\HostX64\x64

image-20221130160020916

配置环境变量INCLUDE

image-20221130160604371

C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt;

C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um;

C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared;

D:\vs2022\VC\Tools\MSVC\14.29.30133\include;

(vs2022是我的安装路径)

配置环境变量LIB

image-20221130161557414

D:\vs2022\VC\Tools\MSVC\14.29.30133\lib\x64;

C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x64;

C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\ucrt\x64;

运行spring-boot3.0测试项目

构建项目

引入GraalVM Native依赖,此次我们引入Web依赖用于测试

image-20221130190451952

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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.0.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.fate</groupId>
    <artifactId>boot3</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>boot3</name>
    <description>boot3</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.graalvm.buildtools</groupId>
                <artifactId>native-maven-plugin</artifactId>
                <extensions>true</extensions>
                <executions>
                    <execution>
                        <id>build-native</id>
                        <goals>
                            <goal>compile-no-fork</goal>
                        </goals>
                        <phase>package</phase>
                    </execution>
                    <execution>
                        <id>test-native</id>
                        <goals>
                            <goal>test</goal>
                        </goals>
                        <phase>test</phase>
                    </execution>
                </executions>
                <configuration>
<!--                    此处是入口类,必须与实际代码一致,否则无法打包成功-->
                    <mainClass>com.fate.boot3.Boot3Application</mainClass>
<!--                    生成的exe文件名-->
                    <imageName>boot-test</imageName>
                    <buildArgs>
                        <buildArg>--verbose</buildArg>
                    </buildArgs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

测试代码

package com.fate.boot3.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author fate
 * @date 2022/11/30
 * @Description
 */
@RestController
@RequestMapping("test")
public class TestController {
    @GetMapping
    public String test(){
        return "test boot3.0";
    }
}

测试运行

image-20221130190851328

打包编译

点击maven侧边栏插件,如图所示

image-20221130191339227

或者直接运行maven命令mvn -Pnative package

开始漫长的编译打包,即使是这样简单的项目也需要好几分钟,并且期间你的电脑也会很卡,

image-20221130191604020

image-20221130191900654

可以看见,耗时近三分钟,编译之后我们发现,target目录下变得不一样了,生成了exe可执行文件,当然你也可能注意到了spring-aot这个文件夹,虽然我还不是很了解aot,但是很明显,大的来了

image-20221130193829658

直接在cmd中运行

image-20221130193741304

image-20221130193757182

大功告成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/49094.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

别再问我Python打包成exe了!(终极版)

那今天我就给大家全面总结一下&#xff1a;Python如何打包成exe&#xff0c;以及如何打得足够小。 一、标准打包 目前比较常见的打包exe方法都是通过Pyinstaller来实现的&#xff0c;本文也将使用这种常规方法。如果对这块已经很熟悉的小伙伴&#xff0c;可以直接下滑到本文下…

Javaweb的AJAX及Axios框架使用(封装AJAX)

概念: AJAX(Asynchronous JavaScript And XML):异步的JS和XML。 作用: 与服务器进行数据交换 :通过AJAX可以给服务器发送请求。使用AJAX和服务器进行通信&#xff0c;就可以使用HTMLAJAX来替换JSP页面。异步交互 :可以在不重新加载整个页面的情况下&#xff0c;与服务器交互…

[附源码]SSM计算机毕业设计学生宿舍管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

永磁同步电机转子位置估算专题——正交锁相环

前言 在电机转子位置估算算法中&#xff0c;常常用到锁相环获取磁链信号或反电势信号中的转子位置信息&#xff0c;考虑到包含转子位置信息的磁链信号或反电势信号多被分解在α,β\alpha,\betaα,β轴&#xff0c;以下内容侧重分析适用于该工况的正交锁相环。 1、正交锁相环原…

线性代数学习笔记10-3:奇异值分解SVD(从四个子空间角度理解)

从四个子空间角度理解SVD AUmmΣmnVnnTA U_{m \times m}\Sigma_{m \times n}V_{n \times n}^TAUmm​Σmn​VnnT​ 将A\mathbf {A}A视为线性变换&#xff0c;并将整个Rn\mathbf R^nRn空间拆分为两部分&#xff0c;即A\mathbf {A}A的行空间&#xff08;维数rrr&#xff09;和零空…

cisco asa学习笔记

cisco asa学习笔记一、网络模拟实验中的问题调试记录1、ASA自身接口地址ping不通(从远端路由过来的主机)2、同安全级别的接口默认不能通信&#xff0c;怎么才能通信&#xff1f;3、一个asa连接3个路由器&#xff0c;互联互通解决方案<1>方案1 全局开启policy-map inspect…

C++习题2

指针调用数组元素 指针调用数组元素 int a[3][4] {{1,4,7,10},{2,5,8,11},{3,6,9,12}};int* pa[3] { a[0],a[1],a[2] };int(*pb)[4]; pb a;int** q pa;cout << *(a[2] 3)<<endl;cout << *(*(pa 2) 3)<<endl;cout << pb[2][3]<<en…

springboot + dubbo 整合Sentinel限流

一、前言 限流对一个生产环境的系统来说&#xff0c;具有重要的意义&#xff0c;限流的目的是为了保护系统中的某些核心业务资源不被瞬间的大并发流量冲垮而采取的一种措施&#xff0c;因此一个成熟的架构设计方案&#xff0c;限流也需要纳入到架构设计和规划中。 二、常用的限…

【linux】进程控制详述

进程控制一、进程创建1.1 fork 的补充1.2 写时拷贝1.3 fork 的使用场景二、进程终止2.1 退出码2.2 退出情况2.3 退出方式三、进程等待3.1 进程等待的原因3.2 进程等待的方法3.2.1 status 位图结构3.2.2 阻塞等待和非阻塞等待四、进程程序替换4.1 程序替换的原理4.2 程序替换函数…

[Spring]第五篇:AOP面向切面编程概念

AOP切面编程一般可以帮助我们在不修改现有代码的情况下,对程序的功能进行拓展,往往用于实现 日志处理,权限控制,性能检测,事务控制等 AOP实现的原理就是动态代理,在有接口的情况下,使用JDK动态代理,在没有接口的情况下使用cglib动态代理 为Dao层所有的add方法添加一个性能记录功…

jupyter中配置多种虚拟环境

Microsoft Windows [版本 10.0.19044.2251] © Microsoft Corporation。保留所有权利。 C:\Users\ThinkStation>conda activate pytorch(pytorch) C:\Users\ThinkStation>conda install ipykernelCollecting package metadata (current_repodata.json): done Solvin…

CAS:956748-40-6|Biotin-PEG-Azide|Biotin-PEG-N3|生物素PEG叠氮供应

由抗生物素或链霉亲和素结合PEG衍生物化学试剂Biotin-PEG-Azide&#xff08;Biotin-PEG-N3&#xff09;&#xff0c;其中文名为生物素-聚乙二醇-叠氮&#xff0c;它所属分类为Azide PEG Biotin PEG。CAS编号为956748-40-6。 该PEG试剂的分子量均可定制&#xff0c;有&#xff…

POSIX线程(一)

目录 一、前言 二、What Is a Thread? 三、Advantages and Drawbacks of Threads 四、A First Threads Program 1、A Simple Threaded Program&#xff08;thread1.c&#xff09; 五、Simultaneous Execution 1、Simultaneous Execution of Two Threads&#xff08;thre…

Caffeine 源码、架构、原理(史上最全,10W超级字长文)

文章很长&#xff0c;而且持续更新&#xff0c;建议收藏起来&#xff0c;慢慢读&#xff01;疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 &#xff1a; 免费赠送 :《尼恩Java面试宝典》 持续更新 史上最全 面试必备 2000页 面试必备 大厂必备 涨薪必备 免费赠送 经典…

IbBBX24–IbTOE3–IbPRX17模块通过清除甘薯中的活性氧来增强甘薯对非生物胁迫耐受性

文章信息 题目&#xff1a;The IbBBX24–IbTOE3–IbPRX17 module enhances abiotic stress tolerance by scavenging reactive oxygen species in sweet potato 刊名&#xff1a;New Phytologist 作者&#xff1a;Huan Zhang&#xff0c;Shaozhen He et al. 单位&#xff1…

终于有阿里p8进行了大汇总(Redis+JVM+MySQL+Spring)还有面试题解全在这里了!

Redis特性 Redis是一直基于键值对的NoSQL数据库&#xff1b; Redis支持5种主要数据结构&#xff1a;string、hash、list、set、zset以及bitmaps、hyperLoglog、GEO等特化的数据结构&#xff1b; Redis是内存数据库&#xff0c;因此它有足够好的读写性能&#xff1b; Redis支持…

[附源码]Python计算机毕业设计SSM临港新片区招商引资项目管理系统的设计与实现(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

jmeter性能测试使用梯度测试的方法

JMeterPlugins-Standard.jar下载地址&#xff1a;Download :: JMeter-Plugins.org 项目验收&#xff0c;用jmeter做并发测试&#xff0c;测试单位不通过&#xff0c;我们可以 仔细一问测试单位&#xff0c;嘿&#xff0c;jmeter写个并发数做测试不算并发测试&#xff0c;要做…

Vue3 —— 利用vite创建一个vue3项目

前言 本文主要讲解如何利用vitevue创建第一个项目以及vue3的基础知识点 一、创建一个vue3项目 这里我们主要介绍如何利用 vitevue3创建项目 1.有关vite Vite&#xff08;法语意为 "快速的"&#xff0c;发音 /vit/&#xff0c;发音同 "veet"&#xff09;是…

Editor扩展常用API

如图 效果图 代码&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; public class Mybianyi : EditorWindow { string PasswordField ""; string m_textArea ""; float …