在Micronaut 1.0.1小版本发布的同时,Object Computing, Inc.(OCI)还发布了Micronaut for Spring 1.0 M1。在发布说明中这样写到:

Micronaut for Spring添加了对Spring基于注解的编程模型的支持,这种模型已经有很长时间的历史了,这样所构建的Micronaut应用和库能够与Micronaut和Spring协作。

Micronaut for Spring采用预先编译的方式,能够实现如下功能:将Spring组件集成到Micronaut应用中;将Spring应用运行为Micronaut应用;将Micronaut bean暴露给Spring应用。

Jonathan Giles是微软的软件工程师,最近讨论了开发人员为何应该考虑迁移至Micronaut:

在Spring Boot和MicroProfile中开发人员认为理所应当的事情,Micronaut却采用了一种与众不同的方式来实现。Micronaut没有像Spring Boot和MicroProfile那样进行运行时的注解处理,而是使用了编译时的注解处理器,除了你自己的代码以外,这些处理器会编译生成额外的类。这意味着启动时间会大幅减低,因为它减少了扫描项目classpath所需要的开销。实际上,Micronaut会尽可能避免使用反射,只有在绝对必要的时候才会使用。

Micronaut之前被称为Particle项目,它是一个全栈的基于JVM的框架,用于创建基于微服务的、云原生的、serverless应用,可以使用Java、Groovy和Kotlin编写。Graeme Rocher是OCI的首席软件工程师、Grails和Micronaut产品的负责人,他在2018年3月的Greach会议上首次介绍了Micronaut。在实现1.0版本的过程中,Micronaut经历了三个候选版本,这些版本之间的间隔时间都不超过三周,在此之后的2018年10月底,1.0的正式版本发布。

样例应用

Micronaut for Spring 仓库中包含了一个样例应用,该样例阐述了如何使用Micronaut for Spring,同时包含了将应用转换为GraalVM原生镜像的工具。

Application.java文件如下所示,在源码层面它来源于一个Spring Boot应用,但是可以作为Micronaut应用运行:

 @SpringBootApplication public class Application {    public static void main(String... args) {        Micronaut.run(Application.class);        // SpringApplication.run(Application.class);    }

Spring Boot应用和Micronaut应用的唯一差异在第5行。第6行在这里注释掉了,只是用来进行对比,如果是Spring Boot应用的话,就会使用这一行的代码了。

命令:

./gradlew bootRun

将会构建和初始Micronaut服务器,如果执行下面的命令:

curl -X GET http://localhost:8080/greeting?name=Mike

将会返回:

{\u0026quot;id\u0026quot;:1,\u0026quot;content\u0026quot;:\u0026quot;Hola, Mike!\u0026quot;}

GraalVM

现在,我们可以在GraalVM上运行Spring应用,它已经完全兼容Spring基于注解的编程模型。通过Micronaut for Spring,样例应用可以转换为GraalVM原生镜像。

如下的两条命令会开始这样的转换过程:

./gradlew assemblejava -cp build/libs/greeting-service-all.jar io.micronaut.graal.reflect.GraalClassLoadingAnalyzer

Micronaut的GraalClassLoadingAnalyzer类会用来分析Micronaut应用的类加载需求。

GraalVM Java分发版本包括了native-image工具,它能够构建应用的原生镜像。在调用native-image的时候,有很多可配置参数,如下面的列表所示:

    native-image --no-server \\         --allow-incomplete-classpath \\         --class-path build/libs/greeting-service-all.jar \\         -H:ReflectionConfigurationFiles=build/reflect.json \\         -H:EnableURLProtocols=http \\         -H:Name=greeting-service \\         -H:Class=greeting.example.Application \\

在样例应用中,包含了一个便利的shell脚本build-native-image.sh,借助该脚本,能够自动化这个过程。生成的原生镜像可执行文件greeting-service可以通过如下的方式进行调用以启动服务器:

./greeting-service

原生镜像应用就是为了快速启动而设计的,它的初始化时间只有42毫秒:

相关资源:

  • Jonathan Giles撰写的使用GraalVM原生编译Micronaut微服务实现超快启动(2018-10-3)
  • InfoQ上的全栈 JVM 框架 Micronaut 通向 1.0 版本之路(2018-10-23)
  • Graeme Rocher编写的Micronaut 1.0 GA版本发布(2018-10-23)

查看英文原文:[Micronaut for Spring Allows Spring Boot Apps to Run as Micronaut Apps](

Micronaut for Spring支持Spring Boot应用以Micronaut形式运行相关推荐

  1. CSE 支持spring 4/5 以及spring boot 1/2 maven组件依赖关系配置参考

    [摘要] 本文介绍了CSE如何使用Spring 4或者Spring 5,以及在Spring Boot 1和Spring Boot 2中如何集成CSE,重点介绍了CSE提供的maven管理器,以及如何使 ...

  2. Dubbo 正式支持 Spring 6 Spring Boot 3

    作者:Dubbo 社区 Dubbo 简介 Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,官方提供了 Java.Golang 等多语言 SDK 实现. ...

  3. IntelliJ IDEA 2022.2 正式发布:已完全支持 Spring 6 和 Spring Boot 3!

    出品 | OSC开源社区(ID:oschina2013) IntelliJ IDEA 2022.2 为远程开发功能带来了多项质量改进,使其更美观.更稳定.从 v2022.2 开始,IntelliJ I ...

  4. spring cloud ,spring boot application.properties 配置属性列表

    #横幅 banner.charset = UTF-8#横幅文件编码. banner.location = classpath:banner.txt#横幅文件位置. banner.image.locat ...

  5. Spring 与 Spring Boot 中的事件机制

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 温安适 来源 | https://my.osc ...

  6. Spring、Spring MVC、Spring boot、Spring Cloud面试题(史上最全面试题,精心整理100家互联网企业,面试必过)

    最全面试题,精心整理100家互联网企业面经,祝你面试成功.面试必过(2023优化版)已发布在个人微信公众号[面向Offer学编程],优化版首先修正了读者反馈的部分答案存在的错误,同时根据最新面试总结, ...

  7. Spring、Spring MVC、Spring Boot三者的关系还傻傻分不清楚?

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 在本文中,你将获取到有关于Spring,Spring MVC和Spring Boot的概述, ...

  8. 多个切点 boot spring_全网独家Spring/Cloud/MVC/Boot,脑图+面试+进阶,就问你服不服?...

    近期搜刮了一些Spring全家桶系列的思维脑图.经典面试题和进阶学习的PDF笔记(非常nice),Spring+SpringCloud+SpringMVC+SpringBoot,一个都没落下全都有!一 ...

  9. JAVAspringboot微服务b2b Spring MVC+mybatis+spring cloud+spring boot+spring security

    鸿鹄云商大型企业分布式互联网电子商务平台,推出PC+微信+APP+云服务的云商平台系统,其中包括B2B.B2C.C2C.O2O.新零售.直播电商等子平台. 分布式.微服务.云架构电子商务平台 java ...

最新文章

  1. 超轻量AI引擎MindSpore Lite
  2. 根据时间点截取wav文件
  3. day19 生成器函数
  4. DL之RetinaNet:RetinaNet算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
  5. JDK 9中已弃用Java的Observer和Observable
  6. docker更换国内镜像源
  7. qprocess start怎么判断是否结束_致恋爱中的我们,怎么样来判断一个女人是否在骗你?...
  8. Linux firewall防火墙详解(一)——firewall基础知识简介
  9. 投资中的黑科技知多少?
  10. 官宣!什么是新基建时代的混合云? | 凌云时刻
  11. Ognl表达式(根据Apache-Ognl文档直译)
  12. VNN结合金蝶Kis9.1专业版Sp1的应用及解决方案
  13. java实现excel 行列转置,行列转换。附完整代码
  14. 欢迎使用CSDN-markdown编辑器大范甘迪
  15. 查看windows服务器内存详细信息,Windows服务器查看内存型号
  16. Python绘图:turtle库基础语法介绍
  17. 错误率的计算、离散概率模型下的统计决策举例
  18. 【算法思考】双目视差求像素深度公式理解
  19. 放弃高薪回家种韭菜,他赚了30万元
  20. w10运行游戏计算机中丢失xinput1-3.dll,解决win10运行绝地求生吃鸡提示缺少xinput1_3.dll文件的方法...

热门文章

  1. 从web移动端布局到react native布局
  2. Java clone() 浅克隆与深度克隆(转)
  3. poj1330Nearest Common Ancestors(LCA小结)
  4. [翻译]关于中国计算机行业未来发展不得不吐的二三事儿。信任、社区、成功故事?...
  5. Windows 8 快捷键收集整理
  6. HttpWebResponse 的问题
  7. 标准差、方差、协方差的区别
  8. Linux终端操作MySQL常用命令
  9. Oracle多行函数
  10. Mac 下安装mysqldb 问题:一条命令解决mysql_config not found