重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本篇内容主要讲解“spring-native的介绍及应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“spring-native的介绍及应用”吧!
10年积累的网站设计、成都网站设计经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有峄城免费网站建设让你可以放心的选择与我们合作。
<谨供参考>
官方介绍
Spring Native提供了使用GraalVM 本机图像编译器将Spring应用程序编译为本机可执行文件的支持。 与Java虚拟机相比,本机映像可以为许多类型的工作负载提供更便宜,更可持续的托管。这些包括微服务,功能工作负载,非常适合容器和Kubernetes 使用本机映像具有关键优势,例如即时启动,即时峰值性能和减少的内存消耗。 GraalVM本机项目希望随着时间的推移会改善一些缺点和折衷方案。构建本机映像是一个繁重的过程,比常规应用程序要慢。预热后,本机映像具有较少的运行时优化。最后,它比具有某些不同行为的JVM还不成熟。 常规JVM和此本机映像平台之间的主要区别是: - 在构建时将未使用的零件删除。 - 反射,资源和动态代理需要配置。 - 类路径在构建时是固定的。 - 没有类延迟加载:可执行文件中附带的所有内容都将在启动时加载到内存中。 - 一些代码将在构建时运行。 - 围绕Java应用程序的某些方面存在一些局限性,这些局限性未得到完全支持。
简单来说,就是更快.更短,更小
更快的启动速度
更短的响应时间
更小的内存消耗
十分适用于目前互联网环境的快捷开发和微服务架构的项目
而Spring Native的基础则是Graalvm,一个由oracle开发维护的多语言编译/运行时平台. 它的官方说法是高性能JDK发行版
,目前已支持到7种语言,包括不仅限于java.ruby.node等 基于graalvm开发的java框架还有一个国内目前还不算太火的Quarkus,在一些油管up的测评视频中,证明quarkus(1.13)要比spring native(0.7x)更快更小,我也写了quarkus快一年了,即使抛弃graalvm本身,也确实比springboot要更快,更短
我用的是0.92,仅支持springboot2.4.5 还有,机器的内存最好备到8个G,因为我测试时候memory in use一度飙升到5个多G,这可能也是graalvm为了更快产生的代价把
pom
4.0.0 org.springframework.boot spring-boot-starter-parent 2.4.5 org.xiaowu behappy-springboot 0.0.1-SNAPSHOT behappy-springboot Demo project for Spring Boot 1.8 0.9.2 org.springframework.boot spring-boot-starter-webflux org.springframework.experimental spring-native ${spring-native.version} org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test io.projectreactor reactor-test test org.springframework.boot spring-boot-maven-plugin exec org.projectlombok lombok paketobuildpacks/builder:tiny true org.springframework.experimental spring-aot-maven-plugin ${spring-native.version} test-generate test-generate generate generate native-image org.graalvm.nativeimage native-image-maven-plugin 21.0.0.2 org.xiaowu.behappy.BehappySpringbootApplication --static native-image package spring-releases Spring Releases https://repo.spring.io/release false spring-releases Spring Releases https://repo.spring.io/release false
测试Controller
/** * 小五 */ [@RestController](https://my.oschina.net/u/4486326) public class TestController { @GetMapping("/") public String test() { return "TestController"; } }
linux环境下安装各种环境(windows需要安装各种c的运行库,安完还是缺...linux和mac要好很多)
graalvm
使用SDKMan安装适当的SDK和GraalVM插件,SDKMan是Java SDK管理工具,可让轻松安装和配置GraalVM所需的依赖项(截至当日,支持8和11) curl -s "https://get.sdkman.io" | bash sdk install java 21.0.0.r8-grl sdk use java 21.0.0.r8-grl gu install native-image
gcc,unzip,zip,glibc-static,zlib
yum install -y glibc-static zlib zlib-devel zip unzip sudo yum group install "Development Tools" 该命令安装了一堆新的软件包,包括gcc,g++和make。 gcc --version
然后spring native提供了两种构建方式
将Spring Native应用程序构建到Docker映像中
运行以下命令以构建Docker映像文件,并将编译后的代码包装在构建包中。 mvn spring-boot:build-image 使用Docker运行映像: docker run -p 8080:8080 docker.io/xxx
将Spring Native应用程序构建到可执行文件中
运行以下命令编译Spring Boot应用程序的本机二进制可执行文件: mvn clean -Pnative-image package 通过运行以下命令来执行本机应用程序: target/spring-native-example
这里我用是第二种方式
速度可以说是相当快了 接下来给他做成docker容器再看下
FROM scratch COPY target/org.xiaowu.behappy.behappyspringbootapplication /app ENTRYPOINT ["/app"] docker build -f Dockerfile -t behappy:1.0 . docker run -p 8080:8080 --name springnative -d behappy:1.0
再贴两张youtube上某up做的对比图
项目仅加了一个webflux 前者是native的,后者是非native的, 可以看到size是有明显缩小的
上图的启动时间是3秒 下图可以看到0.1秒多,spring native官方介绍过,正常的一般启动都不会超过100毫秒,可以看出启动时间上的差距是巨大的 右面是两者的cpu消耗,io占用等信息,也能看出两者有着明显的差距
到此,相信大家对“spring-native的介绍及应用”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!