spring-native的介绍及应用

本篇内容主要讲解“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提供了两种构建方式

  1. 将Spring Native应用程序构建到Docker映像中

运行以下命令以构建Docker映像文件,并将编译后的代码包装在构建包中。
mvn spring-boot:build-image
使用Docker运行映像:
docker run -p 8080:8080 docker.io/xxx
  1. 将Spring Native应用程序构建到可执行文件中

运行以下命令编译Spring Boot应用程序的本机二进制可执行文件:
mvn clean -Pnative-image package
通过运行以下命令来执行本机应用程序:
target/spring-native-example
  • 这里我用是第二种方式

spring-native的介绍及应用

速度可以说是相当快了
接下来给他做成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

spring-native的介绍及应用

再贴两张youtube上某up做的对比图

spring-native的介绍及应用

项目仅加了一个webflux
前者是native的,后者是非native的,
可以看到size是有明显缩小的

spring-native的介绍及应用

上图的启动时间是3秒
下图可以看到0.1秒多,spring native官方介绍过,正常的一般启动都不会超过100毫秒,可以看出启动时间上的差距是巨大的
右面是两者的cpu消耗,io占用等信息,也能看出两者有着明显的差距

到此,相信大家对“spring-native的介绍及应用”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


文章题目:spring-native的介绍及应用
当前地址:http://azwzsj.com/article/gecdje.html