抢先一步
VMware 提供培训和认证,以加快您的进度。
了解更多我代表团队和所有贡献者,高兴地宣布 Spring Native 0.10.0 已发布。它基于 Spring Boot 2.5 和 GraalVM 21.1。
此版本包含许多功能,亮点包括:
引入原生测试。
GraalVM 团队提供的新官方 Gradle 插件。
引入可在类上使用的提前(ahead-of-time)代理。
它还包括 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 代理。通常通过 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` 以避免混淆。
它允许在类上支持安全、事务和各种其他基于代理的机制。请注意,我们将改进此类模式的自动检测,以减少所需显式提示的数量。
基于我们在 Spring Fu 和 Spring Init 实验项目中学到的知识,我们即将发布的 0.11 版本 将专注于引入函数式配置 AOT 变换,以显著减少 Spring 配置基础结构的反射数量。这里的目标是转换 Spring 配置,使其能够被原生镜像静态分析开箱即用地理解。这应该可以优化内存占用并提高 Spring 应用程序的原生兼容性。