SpringBoot 3.0.1,GraalVM:JDK17-22.3.0,3.0的jdk限定17起步
随着3.0发布,Spring-native结束历史使命正式并入主线
现在spring boot原生支持GraalVM全部特性,允许直接编译为本地可执行文件
最大改变:
原来的@SerializationHints修饰在默认场景下终于不用手动添加了
数据库层和Web层的Pojo现在都能自动识别并预处理相关持久化特性
官方文档说只有在部分场合比如手写WebClient/RestTemplate/文档读取
然后需要JSON序列化时需要显式声明,并引入了全新Annotation
@RegisterReflectionForBinding
实际用下来感觉良好,只要你的Pojo足够单纯没有奇怪的成员变量,AOT都能正常通过
如果遇到aot-process流程异常终止,可以添加
<jvmArguments>
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
</jvmArguments>
配置项,运行时会打开debug端口允许你在IDEA中单步代码
顺便一说,spring重新整合了插件,现在AOT流程相关都统一合并进了spring-boot-maven-plugin下管理
Agent文件生成也同样在<jvmArguments>里启用
-agentlib:native-image-agent=config-output-dir=src/main/resources/META-INF/native-image/
然后在native-image插件中用<agentResourceDirectory>指定前述目录
windows下JNI访问dns的GraalVM bug就需要用到jni-config.json来解决
包依赖变化不小,主要是javax打头的JEE相关包都换成了jakarta打头
(旧的可以兼容,但是还是建议换了)
Reactor.tool和GraalVM不兼容,而且这个工具包VMWare那头已经停止开发
spring侧的相关支持都砍掉了,只能直接拿掉
踩了一堆小坑之后,跑起来还是很顺利的,当然native:compile开销依然巨大
虽然现在多多少少还有点坑待填
但能看出来,这大概是继java8之后,spring/java社区最大的一轮变革了
--
FROM 58.57.111.*