TomEE、Spring Boot與Quarkus比較 - Baptista
Java世界中有一個新的框架:Quarkus。我決定比較它與Apache TomEE和Spring Boot相關的行為方式。我將在使用Java 8和Maven時測量偽像大小,編譯,測試和部署時間。
為了比較框架,我將建立一個具有一組現實功能的應用程式。它將使用REST端點,Fault Tolerance和記憶體資料庫與JPA。原始碼可以在Java-framework-compare專案的Github上找到。
每個專案的起點:
Apache TomEE 8.0.0-M2 Microprofile風格來自MicroProfile Starter,它選擇Config和Fault Tolerance API。
Spring Boot 2.1.3應用程式來自Spring Initializr頁面,它新增了web,jpa和H2依賴項。
Quarkus 0.11.0應用程式的起點更加明顯。它來自quarkus-quickstarts捆綁中捆綁的rest-json示例。
基線
所有入門專案都具有不同的捆綁依賴項。只是出於好奇,這些是開箱即用的大小,構建和啟動時間,沒有執行應用程式:
平臺 構建時間 啟動時間 大小(MB) Apache TomEE 8.0.0-M2 5454 3,789 44 Spring-boot 2.1.3 2248 2936 16,7 Quarkus0.11.0 1890 0623 10,5 |
在實際專案中,這對於稍後評估我們的更改對基線的影響非常重要。
加入應用程式
首先,我使用了來自Quarkus rest-json快速啟動示例的實現。這捆綁了一組測試和REST端點,我能夠成功移植到SpringBoot和TomEE。
整合測試使用的是RestAssured和JUnit 5 Jupiter,在3個專案中是等效的。他們需要對SpringBoot進行一些調整。獲取隨機埠並配置RestAssured序列化並不明顯。
在TomEE上我必須使用JUnit 4,因為Arquillian,那裡常用的整合測試框架,還不支援JUnit 5。
我已經為方法新增了Timeout和Fallback Fault tolerance功能。在使用MicroProfile的Quarkus和TomEE以及使用Netflix的Hystrix的SpringBoot上。在SpringBoot中常用的Hystrix處於維護模式我不知道Spring方面的替代品。作為比較,Microprofile Spec增加了對CompletionStage的支援,並將儘快解決反應程式碼問題。
我試圖將JPA與H2資料庫一起使用,但是無法在Quarkus中使用它,所以我也把它放在其他的但保留了所有依賴項。文件仍然是粗略的,我需要更多的研究時間。
平臺 構建時間 透過測試構建時間 啟動時間 大小(MB) Apache TomEE 8.0.0-M2 6,178 15304 4,993 44 Spring-boot 2.1.3 3,358 13,348 6,799 46,9 Quarkus0.11 2,533 7153 0767 23.4 |
在所有專案中,沒有測試的構建時間增加了約1秒。
使用Quarkus進行測試的構建需要花費一半的時間,大小也是其他兩個版本的大小的一半。啟動時間幾乎 是一個數量級。這非常重要。請注意,使用GraalVM的本機程式碼可以進一步減少此開始時間。
當您向其新增實際功能時,SpringBoot啟動時間和超級war大小會顯著增加(> 2x)。
TomEE的啟動速度比SpringBoot快,而且這個用例的超級jar大小非常穩定。沒變。
如果與TomEE或SpringBoot相比,Quarkus的線上資源很少,有大量的試驗和錯誤。
相關文章
- Spring Boot與Micronaut比較Spring Boot
- Spring Boot與Eclipse MicroProfile比較Spring BootEclipse
- Node.js與Spring Boot比較? - Ryan GleasonNode.jsSpring Boot
- 沃達豐希臘公司用Quarkus代替Spring Boot - quarkusSpring Boot
- Spring Boot Native vs Go:效能比較 – Ignacio SuaySpring BootGo
- JAX-RS與Spring Boot對比Spring Boot
- Laravel 和 Spring Boot 兩個框架比較創業篇(二:人工成本)LaravelSpring Boot框架創業
- Laravel 和 Spring Boot 兩個框架比較創業篇(一:開發效率)LaravelSpring Boot框架創業
- ==與equals比較
- Spring Boot虛擬執行緒與Webflux在JWT驗證和MySQL查詢上的效能比較Spring Boot執行緒WebUXJWTMySql
- HTTP方法之@RequestMapping與Spring組合註解比較 - RahulHTTPAPPSpring
- Vuex與Redux比較VueRedux
- Hibernate與mybatis比較MyBatis
- yarn 與 npm 比較YarnNPM
- Vue與React比較VueReact
- RecyclerView與ListView比較View
- React與Vue模板使用比較(一、vue模板與React JSX比較)ReactVueJS
- Spring和SpringBoot比較,解惑區別Spring Boot
- 關於Spring的JDBC連線mysql(與傳統jdbc比較)SpringJDBCMySql
- 微服務2.0時代:Spring Cloud Netflix與 Kubernetes&Istio比較微服務SpringCloud
- ElasticSearch與Spring Boot整合ElasticsearchSpring Boot
- Spring Boot與日誌Spring Boot
- Goland與vscode比較 - redditGoLandVSCode
- Python與Excel VBA比較PythonExcel
- Flutter與Swift比較 - evroneFlutterSwiftVR
- volatile與Atomic的比較
- Kanban與Scrum比較 - modernanalystScrumNaN
- Flutter 與 iOS 功能比較FlutteriOS
- SOA 、MSA與CNA比較
- Spring Boot學習之---Spring Boot與檢索 下(十六)Spring Boot
- Spring Boot中兩個資料庫遷移工具Liquibase和Flyway的比較 - 4lexSpring Boot資料庫UI
- Web Socket 效能對比——Spring Boot vs TomWebSpring Boot
- Solr與Spring Boot整合 - ViithiisysSolrSpring Boot
- DDD中事件與命令比較事件
- OpenShift與Docker全方位比較Docker
- XTask與RxJava的使用比較RxJava
- Flutter與React Native的比較FlutterReact Native
- PostgreSQL與MySQL的比較 - hackrMySql