Spring Native 0.10.0 现已推出

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

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

此版本包含许多功能,亮点包括:

  • 引入原生测试。

  • GraalVM 团队提供的新官方 Gradle 插件。

  • 引入可在类上使用的提前(ahead-of-time)代理。

它还包括 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 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 代理。通常通过 CGLIB 代理在 JVM 上处理的类上的代理不受支持,因为在原生环境中不支持在运行时生成字节码。

// 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 社区中所有即将举行的活动。

查看全部