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](

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章