Micronaut for Spring支持Spring Boot应用以Micronaut形式运行

news/2024/5/20 6:59:35 标签: java, shell, serverless

在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](\"\"


http://www.niftyadmin.cn/n/959541.html

相关文章

优化与内存屏蔽

当使用优化的编译器时,千万不要认为指令会严格按照它们在源代码中出现的顺序执行。 例如,编译器可能重新安排汇编语言指令让寄存器以最优的方式使用。此外,现代CPU通常并行地执行若干条指令,且可能重新安排内存访问。这种重新排序…

手牵手,我们一起搭建VuePress博客

平时Google搜问题的时候,很多方案都是链接到博客上的,有简书、博客园、思否等等,当然,还有很多个人搭建的博客,风格各异。慢慢的,自己又有了自搭博客的想法,一是作为自己工作踩坑的学习记录&…

linux内核同步机制编程框架

文章目录linux系统中出现并发与竞态相关概念:四种情形:linux内核解决竞态引起的异常的方法:即同步方法中断屏蔽概念特点中断屏蔽的编程步骤中断屏蔽相关宏函数应用实例自旋锁概念特点利用自旋锁同步的编程步骤自旋锁相关定义和配套宏函数应用…

C#从windows剪贴板获取并显示文本内容的代码

将开发过程比较好的内容做个记录,下面的资料是关于C#从windows剪贴板获取并显示文本内容的内容。using System;using System.Windows.Forms; namespace RobvanderWoude{class Paste{[STAThread]static int Main( string[] args ){if ( args.Length 0 ){try{if ( Cl…

「镁客·请讲」忆芯科技沈飞:对标Intel与三星,做不一样的“国产替代”

在沈飞看来,客观环境影响不到忆芯,只要服务好客户,就有足够多的机会。 近年,在以日韩半导体为主力且已经稳定成型的内存产品市场中,有一匹“黑马”——固态存储(SSD)技术杀出,并因存…

git repo入门操作学习笔记

这里写自定义目录标题git基本操作git initgit commit -m "添加的提交注释" [filename]撤销修改CSDN上写GIT工具的优质博客很多,本来我也想边学习便总结输出下,但是看到人家的博文珠玉在前,便下不去笔了,下面是我按照下篇…

美国洛杉矶市拟立法 规定新父母可带薪休假18周

中新网1月31日电 据美国侨报网报道,美国洛杉矶市议会两名议员日前提出一项提议,要求制定一项产假政策,允许新父母在不降薪的前提下,享受长达18周的带薪产假。 据报道,洛杉矶市议员柳大卫(David Ryu,音译)和…

SSCOM3.2无法保存窗口的问题的解决

详细问题描述见下图 原因是windows系统中的时间格式设置的问题,改一下时间格式即可 然后再保存下就OK 了