Spring Native实战
什么是Spring Native?
优点
局限性
前置条件
Spring Native项⽬搭建
spring-native
spring-aot
spring-aot-maven-plugin
hibernate-enhance-maven-plugin
构建Spring Boot本机程序
Buildpacks构建docker image
运⾏
启动时间:0.193 s
占⽤内存:108.8 M
GraalVM native build tools构建⼆进制程序
运⾏
启动时间:0.156 s
占⽤内存:106.7 M
JVM启动
启动时间:1.886 s
占⽤内存:394.9 M
总结
什么是Spring Native?
Spring Native是Spring团队的⼀个实验性项⽬,通过GraalVM native-image编译器将Spring 应⽤程序编译为本机可执⾏⽂件。
其作为Spring Framework 6、Spring Boot 3 的⼀部分,改进原⽣⽀持。
Spring Native 的基础是GraalVM ,⽽GraalVM 是使⽤Java 静态编译,将Java 字节码编译为汇编代码,即⼆进制native 程序,他摒弃了JVM ,这是成就它所有优点的根本原因。
编译出来的是原⽣程序,不依赖于JVM ;
启动即峰值,不需要JIT 编译和预热; 启动速度快;
内存占⽤低;
构建的时候,占⽤的资源多(推
荐8G 以上内存)、耗时⻓; 不能直接⽀持反射、动态代理等
动态特性;现在处于实验阶段,⽣态⽐较少
;关于静态编译和GraalVM 相关原理,
可以参考《GraalVM 与Java 静态编译:原理与应⽤》 需要本机安装GraalVM ,编译的时候
最好可以科学上⽹,需要预留出来8G 以上的内存,苹果M 1芯
⽚暂时不⽀持,以及在编译中不确定
的各种问题... 为了更舒适的体验Spring Native 和GraalVM
带来的快感,本⽂选择使⽤GitHub Actions ⾃动构建,只需要安装JDK 11(本地开发使⽤)就⾏,这⾥先放⼀张成功的
图 优点
●●
●●局限性
●●●前置条件
⽹上有很多Spring Native Hello World 的示例,这⾥就不演示了,咱们本次的⽬标在于,构建⼀个能满⾜练⼿项⽬最基本要求的Demo :
数据库持久化-spring data jpa (spring native 集成mybatis 还有些问题); 有版本的初始化SQL ;
集成模版引擎-thymeleaf ;
应⽤监控-actuator ; 访问spring initializr ⽹站:
Spring Native 项⽬搭建
●●●
●
这⾥使⽤的是SpringBoot 2.6.4,Spring Native 0.11.3,Maven,JDK 11,然后添加依赖
下⾯重点介绍⼏个依赖包:
将 Spring 应⽤程序转化为原⽣程序运⾏所需的其他必需依赖 <dependency > <groupId >perimental</groupId > <artifactId >spring-native</artifactId > <version >0.11.
3</version >
</dependency >
spring-native
spring-aot
spring boot选择题在代码标记代理类、资源⽂件时,需要引⽤此依赖
<!--打包的时候排除,当在代码中定义Hints信息时,需要引⽤此包-->
<dependency>
<groupId>perimental</groupId>
<artifactId>spring-aot</artifactId>
<scope>provided</scope>
<version>${spring-native.version}</version>
</dependency>
spring-aot-maven-plugin
Spring AOT插件执⾏代码的提前转换,⽤以修复native image的兼容性,就是GraalVM分析不到,但是SpringBoot⽣态中使⽤的类、资源等,需要使⽤aot插件⽣成proxy-config.json,reflect-config.json,resource-config.json,GraalVM⽀持通过静态⽂件进⾏配置。
<build>
<plugins>
<!--...-->
<plugin>
<groupId>perimental</groupId>
<artifactId>spring-aot-maven-plugin</artifactId>
<version>${spring-native.version}</version>
<executions>
<execution>
<id>test-generate</id>
<goals>
<goal>test-generate</goal>
</goals>
</execution>
<execution>
<id>generate</id>
<goals>
<goal>generate</goal>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论