写点什么

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

  • 2019-01-30
  • 本文字数:1755 字

    阅读完需:约 6 分钟

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
复制代码


将会返回:


{"id":1,"content":"Hola, Mike!"}
复制代码

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 毫秒:


相关资源:


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



2019-01-30 08:006031

评论

发布
暂无评论
发现更多内容

【从零开始学爬虫】采集收视率排行数据

前嗅大数据

大数据 数据采集 爬虫软件 爬虫教程 数据采集教程

2022全球边缘计算大会,火山引擎荣获“优质边缘云服务提供商”称号

火山引擎边缘云

云原生 CDN 边缘计算 边云协同 火山引擎边缘计算

细说react源码中的合成事件

flyzz177

React

前端leetcde算法面试套路之堆

js2030code

JavaScript LeetCode

前端leetcde算法面试套路之回溯

js2030code

JavaScript LeetCode

KCL 与其他 Kubernetes 配置管理工具的异同 - Kustomize 篇 [一个自研编程语言能做什么?(系列 2)]

Peefy

开发者 工具 编程语言 Kubernetes Serverless #DevOps

React源码分析(二)渲染机制

flyzz177

React

手写一个Redux,深入理解其原理-面试进阶

beifeng1996

React

2022前端高频react面试题集锦

beifeng1996

React

腾讯前端常考react面试题(持续更新中)

beifeng1996

React

明道云联合契约锁共建人事场景电子签约解决方案

明道云

Linux RT 进程引发内核频繁卡死的优化方案

火山引擎边缘云

云计算 Linux 云原生 边缘计算 火山引擎边缘计算

极客时间运维进阶训练营第八周作业

9527

用javascript分类刷leetcode23.并查集(图文视频讲解)

js2030code

JavaScript LeetCode

js事件循环与macro&micro任务队列-前端面试进阶

loveX001

JavaScript

React Context源码是怎么实现的呢

flyzz177

React

深入react源码看setState究竟做了什么?

flyzz177

React

2022面试官常考的前端面试题

loveX001

JavaScript

阿里前端常考面试题集锦

loveX001

JavaScript

你是如何使用React高阶组件的?

beifeng1996

React

低代码实现探索(五十四)低代码的描述文本

零道云-混合式低代码平台

2022-12-15:寻找用户推荐人。写一个查询语句,返回一个客户列表,列表中客户的推荐人的编号都 不是 2。 对于示例数据,结果为: +------+ | name | +------+ | Wil

福大大架构师每日一题

数据库· 福大大

零代码平台在政府智慧城市领域的应用

明道云

明道云携手衡石科技共建企业应用数据分析联合解决方案

明道云

React源码分析1-jsx转换及React.createElement

flyzz177

React

架构实战 - 模块3作业

mm

学生管理系统架构 #架构实战营

2022年的各大平台小游戏生态发展到哪一步了?

FN0

游戏开发 小游戏开发 小程序游戏开发

js异步编程面试题你能答上来几道

loveX001

JavaScript

AH协议

穿过生命散发芬芳

12月月更 AH协议

聊聊产品中的状态机设计

产品海豚湾

产品经理 产品设计 产品开发 需求分析 主业务流程梳理

React源码分析(三):useState,useReducer

flyzz177

React

Micronaut for Spring支持Spring Boot应用以Micronaut形式运行_语言 & 开发_Michael Redlich_InfoQ精选文章