Micronaut for Spring支持Spring Boot应用以Micronaut形式运行
在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形式运行相关推荐
- CSE 支持spring 4/5 以及spring boot 1/2 maven组件依赖关系配置参考
[摘要] 本文介绍了CSE如何使用Spring 4或者Spring 5,以及在Spring Boot 1和Spring Boot 2中如何集成CSE,重点介绍了CSE提供的maven管理器,以及如何使 ...
- Dubbo 正式支持 Spring 6 Spring Boot 3
作者:Dubbo 社区 Dubbo 简介 Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,官方提供了 Java.Golang 等多语言 SDK 实现. ...
- IntelliJ IDEA 2022.2 正式发布:已完全支持 Spring 6 和 Spring Boot 3!
出品 | OSC开源社区(ID:oschina2013) IntelliJ IDEA 2022.2 为远程开发功能带来了多项质量改进,使其更美观.更稳定.从 v2022.2 开始,IntelliJ I ...
- spring cloud ,spring boot application.properties 配置属性列表
#横幅 banner.charset = UTF-8#横幅文件编码. banner.location = classpath:banner.txt#横幅文件位置. banner.image.locat ...
- Spring 与 Spring Boot 中的事件机制
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 温安适 来源 | https://my.osc ...
- Spring、Spring MVC、Spring boot、Spring Cloud面试题(史上最全面试题,精心整理100家互联网企业,面试必过)
最全面试题,精心整理100家互联网企业面经,祝你面试成功.面试必过(2023优化版)已发布在个人微信公众号[面向Offer学编程],优化版首先修正了读者反馈的部分答案存在的错误,同时根据最新面试总结, ...
- Spring、Spring MVC、Spring Boot三者的关系还傻傻分不清楚?
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 在本文中,你将获取到有关于Spring,Spring MVC和Spring Boot的概述, ...
- 多个切点 boot spring_全网独家Spring/Cloud/MVC/Boot,脑图+面试+进阶,就问你服不服?...
近期搜刮了一些Spring全家桶系列的思维脑图.经典面试题和进阶学习的PDF笔记(非常nice),Spring+SpringCloud+SpringMVC+SpringBoot,一个都没落下全都有!一 ...
- JAVAspringboot微服务b2b Spring MVC+mybatis+spring cloud+spring boot+spring security
鸿鹄云商大型企业分布式互联网电子商务平台,推出PC+微信+APP+云服务的云商平台系统,其中包括B2B.B2C.C2C.O2O.新零售.直播电商等子平台. 分布式.微服务.云架构电子商务平台 java ...
最新文章
- 超轻量AI引擎MindSpore Lite
- 根据时间点截取wav文件
- day19 生成器函数
- DL之RetinaNet:RetinaNet算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
- JDK 9中已弃用Java的Observer和Observable
- docker更换国内镜像源
- qprocess start怎么判断是否结束_致恋爱中的我们,怎么样来判断一个女人是否在骗你?...
- Linux firewall防火墙详解(一)——firewall基础知识简介
- 投资中的黑科技知多少?
- 官宣!什么是新基建时代的混合云? | 凌云时刻
- Ognl表达式(根据Apache-Ognl文档直译)
- VNN结合金蝶Kis9.1专业版Sp1的应用及解决方案
- java实现excel 行列转置,行列转换。附完整代码
- 欢迎使用CSDN-markdown编辑器大范甘迪
- 查看windows服务器内存详细信息,Windows服务器查看内存型号
- Python绘图:turtle库基础语法介绍
- 错误率的计算、离散概率模型下的统计决策举例
- 【算法思考】双目视差求像素深度公式理解
- 放弃高薪回家种韭菜,他赚了30万元
- w10运行游戏计算机中丢失xinput1-3.dll,解决win10运行绝地求生吃鸡提示缺少xinput1_3.dll文件的方法...
热门文章
- 从web移动端布局到react native布局
- Java clone() 浅克隆与深度克隆(转)
- poj1330Nearest Common Ancestors(LCA小结)
- [翻译]关于中国计算机行业未来发展不得不吐的二三事儿。信任、社区、成功故事?...
- Windows 8 快捷键收集整理
- HttpWebResponse 的问题
- 标准差、方差、协方差的区别
- Linux终端操作MySQL常用命令
- Oracle多行函数
- Mac 下安装mysqldb 问题:一条命令解决mysql_config not found