先人一步
VMware 提供培训和认证,助您加速前进。
了解更多我代表团队及所有贡献者很高兴地宣布 Spring Native 0.10.0 已发布。它基于 Spring Boot 2.5 和 GraalVM 21.1。
此版本包含众多特性,重点包括
引入原生测试。
GraalVM 团队发布的新官方 Gradle 插件。
引入可用于类的提前(AOT)代理。
它还包括 43 个错误修复、文档改进和依赖升级。感谢所有通过问题报告和拉取请求做出贡献的人。
Josh Long 制作了一个很棒的视频来介绍这些新特性,请查看
我们一直在与 GraalVM 团队合作,在构建插件方面将原生镜像提升到新的水平。新的 原生构建工具 取代了之前的 native-image-maven-plugin
,并允许使用本地 native-image
编译器构建和测试您的原生应用程序。
之前只支持 Maven,现在 Maven 和 Gradle 插件都提供了。如果您正在升级,新的 Maven 插件坐标是 org.graalvm.buildtools:native-maven-plugin:0.9.0
。在配置原生构建工具插件后,您可以使用 mvn -Pnative -DskipTests package
或 gradle nativeBuild
构建您的应用程序。您也可以使用 mvn -Pnative test
或 gradle nativeTest
将您的 JUnit 5 测试作为原生镜像运行。Spring Native 本身也已升级以添加初步的测试支持,因此您的 @SpringBootTest
将作为原生镜像运行。这对于原生 Spring Boot 应用程序是一个重要的里程碑,对于包括 Spring 本身在内的 JVM 生态系统也是如此,它们现在可以使用这些官方插件来提高原生支持的质量和可维护性。您可以阅读这篇GraalVM 专门的博客文章了解更多详情。
start.spring.io 已更新,除了 Buildpacks 原生支持外,还内置了原生构建工具的配置,因此您可以使用适合您需求的方式。
对于原生镜像,代理需要在构建时定义。到目前为止,Spring Native 只支持仅适用于接口的 JDK 代理。通常在 JVM 上通过 CGLIB 代理处理的类代理不受支持,因为原生环境中不支持在运行时生成字节码。
// Typical security use case of a class proxy now supported on native
@Service
public class GreetingService {
public String hello() {
return "Hello!";
}
@PreAuthorize("hasRole('ADMIN')")
public String adminHello() {
return "Goodbye!";
}
}
但是从 0.10 版本开始,多亏了出色的 Andy Clement,现在可以通过 @AotProxyHint
注解在构建时生成类代理。请注意,之前的 @ProxyHint
已重命名为 @JdkProxyHint
以避免混淆。
这允许支持类上的安全性、事务以及广泛的其他基于代理的机制。请注意,我们将改进对此类模式的自动检测,以减少所需的显式提示量。
基于我们在 Spring Fu 和 Spring Init 实验项目中获得的经验,我们即将发布的 0.11 版本将专注于引入函数式配置 AOT 转换,以显著减少 Spring 配置基础设施的反射量。其目标是以原生镜像静态分析可以开箱即用的方式转换 Spring 配置。这应该既能优化内存占用,又能提高 Spring 应用程序的原生兼容性。