本文的作者是 Graeme Rocher,他是 Grails 和 Micronaut 框架的项目负责人,主导 Grails 开发10多年,有着丰富的 Grails 和 Spring 架构经验。由于 Grails 和 Micronaut 的开发团队和社区与 Spring 项目之间都很有渊源,而我也是其中最早的用户和参与者,所以本文将 Micronaut 介绍给 Spring 技术社区,后续也会发布更多相关的技术文章,欢迎大家积极参与讨论和分享。
以下内容来自 OCI 官方博客,由 Graeme Rocher 发表:
随着 Micronaut 1.0.1 的发布,OCI 的 Micronaut 团队很高兴地宣布推出 Micronaut for Spring 1.0 M1。
Micronaut for Spring 增加了使用长期建立的基于 Spring 注解的编程模型来构建与 Micronaut 和 Spring 一起使用的 Micronaut 应用程序和库的能力。
提供的示例应用程序在源代码级别是 Spring Boot 应用程序。使用预先编译 Ahead of Time(AOT)Micronaut 能够计算和解释 Spring 注解编程模型,并生成有效的 Micronaut 应用程序,而不会增加任何运行时开销。然后,可以在 GraalVM 上执行 Micronaut 应用程序:
这种方式非常简单。Micronaut 有一组注解,在运行时用于实现框架。Spring 有另一套可以简单地映射到 Micronaut 的注解上。您可以将这些注解视为源代码级域特定语言(DSL)。在编译时,注解元数据被解析,并将 Spring 注解映射到等效的 Micronaut 注解元数据,就像 Micronaut 可以运行 Spring 应用程序一样。
请注意,目前只支持 Spring 的一个子集,但足以构建真正的应用程序和库,无论它们是否包含在 Spring Boot 应用程序或 Micronaut 应用程序中。
这对 Micronaut 开发者有什么用?
尽管在应用程序依赖项中包含 Spring 对于 Micronaut 开发人员来说有一些缺点(值得注意的是 JAR 大小从 13MB 到 29MB),使用 Spring 注解编程模型也有一些有趣的好处,包括:
工具支持。如果将应用程序导入到 Spring 感知的IDE(例如 IntelliJ IDEA 或 STS 4.0)中,则 Spring 的功能可以“正常工作”。这是有道理的,因为 IDE 在源代码上运行,因此就 IDE 而言,应用程序是 Spring 应用程序,即使在运行时应用程序实际上是 Micronaut 应用程序。Spring 生态系统中的任何源代码级工具都是如此。Spring 和 Grails 的兼容性。通过使用 Spring 注解编程模型,可以构建与 Spring Boot、Grails 和 Micronaut 一起使用的自动配置、端点、控制器和库。更容易迁移到 Micronaut。虽然不是 Spring 的每个功能都得到支持,但绝大多数重要方面都是。这样可以更轻松地培训新开发人员,迁移现有代码并使用 Micronaut。请注意,如果您的源代码仅引用 Spring 注解而不是 Spring 接口,则 Spring 实际上可以是“compile-only”依赖项,这会将 JAR 大小缩减回 13MB 并带来上述所有好处。
这对 Spring 开发者有什么用?
对于Spring开发人员来说,好处也很多。
Micronaut 能够使之前采用 Spring 编程模型由于性能或内存消耗限制从未能够实现的领域:
物联网(IoT)。Micronaut 在物联网场景中运行良好,包括 Raspberry Pi。这是因为 Micronaut 应用程序的内存配置文件与 Spring 或 Jakarta EE 应用程序无关,可以节省大量成本。GraalVM。Micronaut 是之一个以切实可行的方式将原有的 Spring 编程模型引入 GraalVM 的框架。您可以在 GraalVM 上的源代码级别运行本质上是 Spring Boot 的应用程序,并实现闪电般快速的功能和低内存占用的微服务。Android 系统。我记得在 SpringSource 的早期阶段,有着将 Spring 编程模型引入 Android 的野心。但它从未真正发生过,只有像 RestTemplate 这样的小型 Spring 组件才能进入 Android。Micronaut 核心容器已经在 Android 上运行,并且有可能将整个 Spring 编程模型带到 Android。我们对 Android 上的 Micronaut 抱有很大的志向。AOT 编译。Micronaut 可以被认为是 AOT 的框架,具有完整的 API,可以跨语言实现执行许多 AOT 任务。例如,参考示例应用程序能够在编译时通过 Micronaut 计算 Swagger API 元数据,即使实际上没有引用 Micronaut API。无服务器。借助 Micronaut 更快的冷启动和更低的内存成本,构建使用 Spring 编程模型的高效应用程序变得更加容易。库兼容性。JHipster 和 Spring Boot Admin 等项目现在可以将 Micronaut for Spring 作为编译时注解处理器,并与 Spring Boot 和 Micronaut 一起使用。这对库生态系统来说绝对是个好消息。Spring 的 Micronaut 功能。由于注解映射适用于任何类,因此您可以获得基于 Spring 注解的编译时声明性 HTTP 客户端,并且可以使用任何其他 Micronaut 功能。如上所述,使用 Micronaut for Spring,现在技术上也可以编写 Spring Boot、Micronaut 和 Grails 的 Spring Boot 自动配置。Pivotal 的 Spring 团队甚至可以使用这个库,并使用 Spring Boot 或 Micronaut 进行大量的 spring-boot-autoconfigure。
这样做的方式是 Spring Boot 在运行时计算自动配置,而如果编译时元数据在那里,Micronaut 会自动加载它而不需要额外的运行时计算。
由于 Micronaut 也可以用作 Spring Boot 的父应用程序上下文,因此 Spring Boot 的核心甚至可以更新为使用 Micronaut 进行内部连接并将 GraalVM 与 Spring Boot 兼容。如果 Pivotal 开发人员感兴趣,我们很欢迎来聊聊。
这对 Grails 开发者有什么用?
我们开发 Spring for Micronaut 的主要原因实际上是 Grails 4.0。
我已经开始研究 Grails 4.0,作为规划的一部分,我们希望 Grails 开发人员能够从我们在过去一年中对 Micronaut 的投资中获益。
在 Grails 4.0 中,Micronaut 将接替 Grails 应用程序的父上下文,Grails 的大部分内部连接将基于 Micronaut 而不是 Spring,这样我们就可以减少内存消耗并缩短启动时间。结合 Spring 团队在 Spring Boot 2.1 中所做的改进,将在内存消耗和启动时间方面对 Grails 4.x 应用程序进行重大改进。
由于 Micronaut 将成为 Grails 4.0 应用程序的父上下文,这也意味着我们为 Micronaut 开发的每个功能都可以在 Grails 4.0 应用程序中使用,从编译时客户端(如HTTP客户端和Kafka客户端)到服务发现和客户端负载平衡等功能。
MicroProfile 怎么样?
我很高兴与参与 MicroProfile 的一些人交谈,虽然项目的目标很有趣,但任何基于通过反射注解的运行时分析的模型都会遭遇内存消耗问题,因此我对目前的实现方式表示怀疑。
说到这一点,我已经阅读了规范,Micronaut 能够使用 AOT 在编译时支持任何注解集,这意味着 Micronaut 可以使用与 Micronaut for Spring 相同的 在技术上支持 MicroProfile。
换句话说,没有理由通过映射注解和提供一些接口桥来实现基于 JAX-RS/CDI 的 MicroProfile 实现。如果 MicroProfile 人员有兴趣与我们聊聊,我们在这里随时恭候。
总结
当我今年早些时候在 Greach 首次推出 Micronaut 时,我提到 Micronaut 不仅仅是另一个HTTP服务器实现(用Java编写的新HTTP服务器似乎每周都会出现在Github上!)。Micronaut 有可能彻底改变典型 Spring 和 Jakarta EE应用程序的运行时特性,同时保留开发人员熟悉和喜爱的大部分功能集,从而彻底改变 JVM 应用程序的构建方式。
通过使 JVM 用户可以访问 AOT 并跨语言(目前是Java、Kotlin和Groovy)实现 AOT 的兼容性,Micronaut 能够将源代码与运行时环境分离,就像之前没有其它框架那样。女士们和先生们,这就是预先编译的力量。
如果您想了解更多信息,我将于2018年11月14日星期三发布 介绍 Micronaut 的免费 研讨会,我还将于2018年11月15日星期四在比利时Devoxx上发表有关 Micronaut 的演讲。期待见到您!
相关文章:
Micronaut 正式开源,构建微服务应用的新选择!Micronaut 1.0 RC1 发布,了解其独特的关键特性Micronaut 1.0 RC2 发布,实现技术及原理揭秘Micronaut 1.0 RC3和Micronaut Test 1.0 RC1 发布Graeme Rocher访谈:介绍Micronaut原文:https://objectcomputing.com/news/2018/11/13/spring-boot-micronaut-ahead-time-compilation
翻译:春之雨
说明:版权归原文作者,翻译仅供学习参考。时间仓促,翻译不免出错,欢迎反馈和讨论,
感谢阅读。