原创作者:DDY
背景:
Spring 团队日前发布了 Spring Native Beta 版。通过 Spring Native,Spring 应用将有机会以 GraalVM 原生镜像的方式运行。为了更好地支持原生运行,Spring Native 提供了 Maven 和 Gradle 插件,并且提供了优化原生配置的注解。
特点:
基于native images: GraalVM 进行代码编译
优点:
1.立即启动,一般启动时间小于100ms
2.更低的内存消耗
3.独立部署,不再需要JVM
4.同样的峰值性能要比JVM消耗的内存小
缺点:
1.构建时间长
2.只支持新的Springboot版本(Spring Native 0.9.0 supports Spring Boot 2.4.3, Spring Native 0.9.1 will support Spring Boot 2.4.4, etc.)
评估:
新版本说明:
(一) 本系统基于0.91版本建设,新版本说明见《spring-native新版本说明》
(二)作者已完成基于0.10.1版本的详细编制攻略,觉得本文编程部分写得不清晰的同学请移步《基于spring-native 0.10.1版本的完整初级入门流程》
操作命令:
1. mvn spring-boot:build-image
2. gradle bootBuildImage
实践:
1.新建一个2.4.4版本的springboot项目。
2.在pom.xml的位置使用命令mvn spring-boot:build-image构建。
配置阿里云的maven 代理仓库:
<repository>
<id>grails-core</id>
<url>https://maven.aliyun.com/repository/grails-core</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
在项目POM中引入依赖:
<dependency>
<groupId>org.springframework.experimental</groupId>
<artifactId>spring-native</artifactId>
<version>0.9.1-20210321.194059-39</version>
</dependency>
<plugin>
<groupId>org.springframework.experimental</groupId>
<artifactId>spring-aot-maven-plugin</artifactId>
<version>0.9.1</version>
<executions>
<execution>
<id>test-generate</id>
<goals>
<goal>test-generate</goal>
</goals>
</execution>
<execution>
<id>generate</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
Spring AOT 插件
Spring AOT插件执行提前转换,以提高native image的兼容性和内存占用。
提示:转换也适用于JVM,所以无论如何这都可以应用。
参考代码:
参考链接:
spring-native官方文档:
https://docs.spring.io/spring-native/docs/current/reference/htmlsingle/#getting-started-native-image
spring.io上的项目介绍:
https://spring.io/blog/2021/03/11/announcing-spring-native-beta
GitHub仓库:
https://github.com/spring-projects-experimental/spring-native
基于spring-native 0.10.1版本的完整初级入门流程