@levinzhang
2019-01-16T00:21:27.000000Z
字数 2613
阅读 616
by
在Micronaut 1.0.1小版本发布的同时,Object Computing, Inc.(OCI)还发布了Micronaut for Spring 1.0 M1。Micronaut for Spring采用预先编译的方式,能够实现如下功能:将Spring组件集成到Micronaut应用中;将Spring应用运行为Micronaut应用;将Micronaut bean暴露给Spring应用。
在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上运行Spring应用,它已经完全兼容Spring基于注解的编程模型。通过Micronaut for Spring,样例应用可以转换为GraalVM原生镜像。
如下的两条命令会开始这样的转换过程:
./gradlew assemble
java -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