转载

Micronaut使用提前编译支持Spring Boot

随着 Micronaut 1.0.1 的发布,OCI的Micronaut团队很高兴地宣布推出 Micronaut for Spring 1.0 M1 。

Micronaut for Spring增加了使用历史悠久的基于Spring注释的编程模型来构建与Micronaut和Spring一起使用的Micronaut应用程序和库的能力。

提供的 示例应用程序 在源级别是Spring Boot应用程序。使用提前(AOT)编译,Micronaut能够计算和解释Spring注释编程模型,并生成有效的Micronaut应用程序,而不会增加任何运行时开销。然后,可以在GraalVM上执行Micronaut应用程序。

Micronaut有一组注释,在运行时用于实现框架。Spring有另一套可以简单地映射到Micronaut的注释上。您可以将这些注释视为源代码级域特定语言(DSL)。

在编译时,解释注释元数据并将Spring注释映射到等效的Micronaut注释元数据,就像这样,Micronaut可以运行Spring应用程序。

请注意,只支持Spring的一个子集,但它足以构建真正的应用程序和库,无论它们是否包含在Spring Boot应用程序或Micronaut应用程序中。

支持Spring Boot的好处

尽管在应用程序依赖项中包含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实际上可以是“仅编译”依赖项,这会将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进行内部连接,并为Spring Boot带来GraalVM兼容性。如果Pivotal开发人员感兴趣, 我们很乐意聊天 。

GRAILS开发人员有什么用?

我们为Spring开发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实现。

总结

当我今年早些时候在Greach首次推出Micronaut时,我提到Micronaut不仅仅是另一个HTTP服务器实现(用Java编写的新HTTP服务器似乎每周都会出现在Github上!)。Micronaut有可能彻底改变典型Spring和/或Jakarta EE应用程序的运行时特性,同时保留开发人员熟悉和喜爱的大部分功能集,从而彻底改变JVM应用程序的构建方式。

通过使JVM用户可以访问AOT并跨语言(目前是Java,Kotlin和Groovy)实现AOT的兼容性,Micronaut能够将源代码与运行时环境分离,就像之前没有其他框架一样。

原文  https://www.jdon.com/51639
正文到此结束
Loading...