Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通)

这篇具有很好参考价值的文章主要介绍了Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

说明:都知道,我是搞java的,最近搞c的算法和redis数据库比较多,所以对于以下文章,都是我自己这样认为的,各位看完之后,可尽情评论。

GraalVM Native Image Support 具体用法

以往文章:

Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)-CSDN博客

利用GraalVM将java文件变成exe可执行文件-CSDN博客

概述:我们为什么执意将springboot web项目变成可执行文件?那是因为谁也不想每次部署的时候都要携带一个jre,无论是docker部署,都要携带jdk,而GraalVM Native Image Support 解决这个问题。

概述:我们为什么要使用虚拟线程?因为jdk本身的线程与内核线程的关系就是1对1的,太浪费内核线程资源了。关于虚拟线程,我会专门出一篇文章讲这个的。现在讲述如何在springboot中使用虚拟线程

在这之前,各位要先把jdk换成GraalVM,把JAVA_HOME变成GraalVM的

第一步:安装Visual Studio  2022

你们可以参考一下我的,这些都要勾选一下

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通),java,spring,spring boot

 第二步:配置环境变量

   安装好了之后,右键打开文件的所在位置。

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通),java,spring,spring boot

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通),java,spring,spring boot

一般都在这两个文件夹里面,第二步,配置环境变量。

配置一下INCLUDE库和LIB库

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通),java,spring,spring boot

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通),java,spring,spring boot

第三步:搭建springboot项目

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通),java,spring,spring boot

MyApplication.java

package org.cyl.test04;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class MyApplication {

    @RequestMapping("/")
    String home() {
        return "Hello World!";
    }

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

}

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>
    <groupId>org.cyl</groupId>
    <artifactId>test04</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>test04</name>
    <description>test04</description>
    <properties>
        <java.version>17</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>3.2.1</spring-boot.version>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.1</version>
    </parent>


    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>17</source>
                    <target>17</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.graalvm.buildtools</groupId>
                <artifactId>native-maven-plugin</artifactId>
                <configuration>
                    <imageName>sb</imageName>
                    <mainClass>org.cyl.test04.MyApplication</mainClass>
                    <buildArgs>
                        --no-fallback
                    </buildArgs>
                </configuration>
                <executions>
                    <execution>
                        <id>build-native</id>
                        <goals>
                            <goal>compile-no-fork</goal>
                        </goals>
                        <phase>package</phase>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>
    <repositories>
        <repository>
            <id>spring-releases</id>
            <name>Spring Releases</name>
            <url>https://repo.spring.io/release</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

</project>

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通),java,spring,spring boot

第四步:进行打包即可

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通),java,spring,spring boot

由于pom文件的原因,打包后会生成sb.exe可部署文件

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通),java,spring,spring boot

第五步:双击运行项目

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通),java,spring,spring boot

打开localhost:8080

结果展示:

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通),java,spring,spring boot

虚拟线程具体用法

虚拟线程在java20的时候就在孵化了,在jdk21稳定版的时候推出来的。

所以要想使用虚拟线程,必须将自己的jdk升级到21版本。

虚拟线程的一个副作用是这些线程是守护程序线程。 如果没有非守护程序线程,JVM 将退出。 当您依赖时,这种行为可能是一个问题,例如 bean 来保持应用程序处于活动状态。 如果使用虚拟线程,那么调度程序线程是虚拟线程,因此是守护程序线程,不会使 JVM 保持活动状态。 这不仅会影响调度,其他技术也可能是这种情况! 要使 JVM 在所有情况下都保持运行,建议将该属性设置为spring.main.keep-alive=true 。 这确保了 JVM 保持活动状态,即使所有线程都是虚拟线程。

那么如何在springboot3中使用虚拟线程呢?

很简单,只需要设置一个属性即可:

spring.threads.virtual.enabled=true

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通),java,spring,spring boot

第一步:搭建项目

在这里特别吐槽一下:

阿里云的镜像,现在还没有jdk21的选项。

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通),java,spring,spring boot

不过无所谓,咱们直接去官网

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通),java,spring,spring boot

当然官网的网速肯定很慢,不过我相信以看到我文章的各位水平而言,这不算什么。

这里我们就选Web,因为仅仅测试虚拟线程而已。

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通),java,spring,spring boot

把该删的都删了,就好了。

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.2.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>org.cyl</groupId>
    <artifactId>test05</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>test05</name>
    <description>test05</description>
    <properties>
        <java.version>21</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通),java,spring,spring boot

第二步:配置好后启动项目

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通),java,spring,spring boot

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通),java,spring,spring boot文章来源地址https://www.toymoban.com/news/detail-794721.html

到了这里,关于Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot3 GraalVM 原生镜像打包 搭建云原生环境

    java发布到如今,已经过去几十年,如今微服务、云原生逐渐成为了主流,java原本的很多优势不再重要,而启动慢,耗内存等的缺点也越来越被放大. java在新发布的很多相关技术中也做出了很多改变 其中SpringBoot3结合GraalVM,可以直接将java项目打包成原生可执行文件,提升运行速度并大

    2024年02月06日
    浏览(38)
  • SpringBoot3.0新特性:1、spring.factories文件废弃,自动配置包位置变化 2、Spring Native 快速体验 3、jakata api迁移 3、三方库的支持

    有自己写过starter包的友友们一定知道,一定用/META-INF/spring.factories文件定义发现自动配置,但是在springboot 2.7,这个文件就被弃用了,在springboot 3.0 就被彻底移除了。 比如之前定义的/META-INF/spring.factories文件: 而现在 这个/META-INF/spring.factories并不是不存在了,只是在3.0之后 外

    2024年02月10日
    浏览(34)
  • SpringBoot3之GraalVM之Windows详细安装及使用教程

    我直接使用的是IDEA plugins文件夹下的maven 新建MAVEN_HOME环境变量 Path环境变量追加 因为GraalVM需要调用操作系统的底层工具,而Windows底层工具是VisualStudio,所以我们要先下载安装好VisualStudio。 下载Visual Studio Community 《Visual Studio Community官网下载》 下载完以后直接安装即可 选择

    2024年02月14日
    浏览(30)
  • Spring3新特性:Graalvm打包Springboot+Mybatis;Graalvm打包成Docker

    项目源代码 https://github.com/cmdch2017/SpringNative_Graalvm_Mybatis 安装graalvm与配置环境 首先安装步骤参考这篇博客 https://blog.csdn.net/weixin_38943666/article/details/129505945 其次如何处理反射 https://blog.csdn.net/qq_32740973/article/details/131799510 第一步,直接拷贝我项目中的config文件夹到你的项目 第

    2024年01月19日
    浏览(40)
  • 【SpringBoot】一、SpringBoot3改变&新特性

    前言 本文适合具有springboot的基础的同学。 Java 17或更高版本 Gradle 7.5+或Maven 3.5+ SpringMVC 5.2 以后 允许我们使用函数式的方式,定义Web的请求处理流程。 Web请求处理的方式: @Controller + @RequestMapping:耦合式 (路由、业务耦合) 函数式Web:分离式(路由、业务分离) 场景:Us

    2024年02月10日
    浏览(22)
  • 【SpringBoot】一、SpringBoot3新特性与改变详细分析

    前言 本文适合具有springboot的基础的同学。 Java 17或更高版本 Gradle 7.5+或Maven 3.5+ SpringMVC 5.2 以后 允许我们使用函数式的方式,定义Web的请求处理流程。 Web请求处理的方式: @Controller + @RequestMapping:耦合式 (路由、业务耦合) 函数式Web:分离式(路由、业务分离) 场景:Us

    2024年02月12日
    浏览(32)
  • 【SpringBoot3】Spring Boot 3.0 介绍以及新特性

    Spring Boot 3.0 是 Spring Boot 框架的一个重要版本,它在保持了 Spring Boot 的一贯优点的同时,也进行了一些重要的改进和更新。 首先,Spring Boot 3.0 对 Java 版本的要求进行了更新。这个版本要求使用 Java 17 作为最低版本,以利用最新的语言特性和性能改进。如果你正在使用的是

    2024年01月17日
    浏览(42)
  • 【SpringBoot3】--03.数据访问、基础特性(外部化和内部外配置、整合JUnit)

    学习视频: 尚硅谷SpringBoot3视频 SpringBoot 整合 Spring 、 SpringMVC 、 MyBatis 进行 数据访问场景 开发 勾选之后会导入以下包 安装 MyBatisX 插件,帮我们生成Mapper接口的xml文件即可 在接口处 : Alt + 回车 必须把mapper的xml文件映射位置在配置文件定义! 而驼峰命名转换建议也开启 编

    2024年02月16日
    浏览(31)
  • 我把Solon打包成了native image,速度快的惊人

    Solon 一个高效的应用开发框架:更快、更小、更简单。https://solon.noear.org/ 我刚开始对 Solon 感兴趣的原因,就是启动快、包体积小,用了一段时间之后,发现 Solon 使用 GraalVM native iamge 打包有一些问题,我把问题发到 Solon 用户群里,作者告诉我 Solon 的原生编译还 beat 阶段,只

    2023年04月27日
    浏览(31)
  • GraalVM详细安装及打包springboot、java、javafx使用教程(环境安装篇)

    下一篇:GraalVM详细安装及打包springboot、java、javafx使用教程(打包普通JAVA项目篇) GraalVM是一款由Oracle公司开发的一款具有高效性能、降低基础设施成本、支持Java发展、与其他编程语言无缝集成、创建本机镜像等优点的跨平台虚拟机。它支持多种编程语言,如Java、JavaScript、Rub

    2024年04月26日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包