Spring Native 0.10.0 现已发布

版本发布 | Sébastien Deleuze | 2021 年 6 月 14 日 | ...

我代表团队及所有贡献者很高兴地宣布 Spring Native 0.10.0 已发布。它基于 Spring Boot 2.5GraalVM 21.1

此版本包含众多特性,重点包括

  • 引入原生测试。

  • GraalVM 团队发布的新官方 Gradle 插件。

  • 引入可用于类的提前(AOT)代理。

它还包括 43 个错误修复、文档改进和依赖升级。感谢所有通过问题报告和拉取请求做出贡献的人。

Josh Long 制作了一个很棒的视频来介绍这些新特性,请查看

原生测试和 Gradle 插件

我们一直在与 GraalVM 团队合作,在构建插件方面将原生镜像提升到新的水平。新的 原生构建工具 取代了之前的 native-image-maven-plugin,并允许使用本地 native-image 编译器构建和测试您的原生应用程序。

之前只支持 Maven,现在 Maven 和 Gradle 插件都提供了。如果您正在升级,新的 Maven 插件坐标是 org.graalvm.buildtools:native-maven-plugin:0.9.0。在配置原生构建工具插件后,您可以使用 mvn -Pnative -DskipTests packagegradle nativeBuild 构建您的应用程序。您也可以使用 mvn -Pnative testgradle nativeTest 将您的 JUnit 5 测试作为原生镜像运行。Spring Native 本身也已升级以添加初步的测试支持,因此您的 @SpringBootTest 将作为原生镜像运行。这对于原生 Spring Boot 应用程序是一个重要的里程碑,对于包括 Spring 本身在内的 JVM 生态系统也是如此,它们现在可以使用这些官方插件来提高原生支持的质量和可维护性。您可以阅读这篇GraalVM 专门的博客文章了解更多详情。

start.spring.io 已更新,除了 Buildpacks 原生支持外,还内置了原生构建工具的配置,因此您可以使用适合您需求的方式。

可用于类的提前(AOT)代理

对于原生镜像,代理需要在构建时定义。到目前为止,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 以避免混淆。

这允许支持类上的安全性、事务以及广泛的其他基于代理的机制。请注意,我们将改进对此类模式的自动检测,以减少所需的显式提示量。

下一步:函数式配置 AOT 转换

基于我们在 Spring FuSpring Init 实验项目中获得的经验,我们即将发布的 0.11 版本将专注于引入函数式配置 AOT 转换,以显著减少 Spring 配置基础设施的反射量。其目标是以原生镜像静态分析可以开箱即用的方式转换 Spring 配置。这应该既能优化内存占用,又能提高 Spring 应用程序的原生兼容性。

获取 Spring 时事通讯

订阅 Spring 时事通讯,保持联系

订阅

先人一步

VMware 提供培训和认证,助您加速前进。

了解更多

获取支持

Tanzu Spring 通过一项简单的订阅,提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将举办的活动

查看 Spring 社区所有即将举办的活动。

查看全部