天天看點

你應該知道的 7 個很棒的 Java 項目

作者:IT技術控
你應該知道的 7 個很棒的 Java 項目

Java生态系統擁有龐大而多樣化的開源項目,旨在滿足幾乎所有想象得到的需求。很容易錯過其中一些偉大的項目。以下是七個開源Java項目,涵蓋從全棧應用程式開發到微服務、Wasm和JVM替代方案的所有内容。

▌Vaadin’s Hilla

Hilla是一個全棧架構,具有基于Java的後端和JavaScript前端。它支援響應式前端架構React和Lit。Hilla讓您使用一個簡單的指令來建構一個新的全棧項目:npx @vaadin/cli init --hilla foundry-hilla。這是一個NPM指令,但它将部署一個标準的Maven布局,帶有一個使用Vite建構的前端目錄,一切都準備好與./mvnw腳本一起運作。

Hilla在兩個應用程式部分之間強制執行類型,這意味着您的IDE可以檢測并傳播Java API和消耗它的TypeScript前端之間的更改。在這個架構中,自動完成和重構都可以正常工作。這個功能在全TypeScript世界中的感覺類似于tRPC。

Hilla還通過JPA(在Hibernate上)內建了一些SQL資料庫,如MySQL和PostgreSQL。

它有點像jHipster,但更有見解。這意味着Hilla在可以将技術粘合在一起方面不太靈活,但它為您提供了更平滑的道路。Hilla得到了良好的維護和文檔支援。如果您需要使用Java建構全棧應用程式,并且如果您喜歡React或Lit作為前端,那麼Hilla是一個值得考慮的優秀架構。

▌jHipster

繼續全棧架構的主題,我們有jHipster。jHipster采用非常靈活的方法,可以将多種不同的技術統一到一個使用Java作為API中間件的協同堆棧中。您可以選擇幾個響應式前端和各種SQL和NoSQL資料存儲。

與Hilla類似,jHipster首先通過NPM包jhipster-generator工具生成應用程式。生成器将引導您完成一個問卷調查,讓您對其功能有一個很好的了解。

jHipster首先讓您選擇單片應用程式、微服務架構或網關,讓您對該架構的範圍有一些了解。如果您選擇單片,您就可以使用Spring WebFlux将其變成響應式樣式的應用程式。接下來,您可以選擇不同的身份驗證樣式,如JWT或Oauth 2。然後,您可以從幾個資料存儲中選擇,如SQL、MongoDB和Cassandra,然後是第二級應用程式緩存,如Ehcache、Memcached或Redis。

jHipster生成器接下來允許添加一些其他技術:Elasticsearch用于搜尋引擎,使用Spring WebSocket的WebSockets,作為異步消息代理的Apache Kafka,以及使用OpenAPI-generator的API-first開發。接下來,您可以從幾個前端架構中選擇,并在需要時生成管理UI,以及幾個主題。

jHipster還具有國際化和測試功能,并支援Maven和Gradle。

這是相當強大的。還可以生成域模型、資料結構和與之配套的UI。jHipster是建構許多類型的Java應用程式的絕佳選擇。

▌GraalVM

GraalVM項目始于2018年3月,旨在提供更廣泛的虛拟機實作。GraalVM可以做到JVM所能做的一切,甚至更多:它允許消耗各種語言,并輸出到各種目标執行環境。它還包括幾種編譯器樣式,包括可以增強性能的JIT(即時)編譯器。

GraalVM可以運作任何編譯為LLVM的語言,包括C、C++、Rust、Swift等。它還處理位元組碼語言,如Java、Scala、Kotlin和Groovy。它還支援JavaScript、Python、Ruby和R語言。(未來,我們可以希望看到GraalVM支援Zig。)

這意味着我們可以獲得JVM的所有一次編寫,随處運作的好處,适用于各種語言。例如,GraalVM可以接受使用GCC編譯為LLVM位元組碼的C程式,并使用lli指令運作它。或者,GraalVM可以使用clang将C代碼直接編譯為可執行檔案。GraalVM為許多(但不是所有)語言和平台輸出獨立的執行版本。

它還包括對許多目标二進制檔案的支援,如Wasm、Linux變體、macOS、Windows、iOS和Android。對于許多目标,GraalVM支援無需安裝GraalVM即可運作的本機映像。它還允許開發人員選擇執行模式,如JIT編譯、AOT編譯和解釋,以微調性能配置檔案。

GraalVM得到了良好的維護和文檔支援,并擁有一個活躍的社群。總的來說,它是一個引人注目的項目,正在逐漸成為一種通用語言工具。請通路GraalVM項目首頁以了解更多資訊。

▌Micronaut

Micronaut是Java開發的一種新方法,旨在面向現代雲和無伺服器環境。它具有豐富的功能,如用于腳手架、建構、執行和測試具有一系列內建技術的項目的指令行工具。也許最重要的是,Micronaut是圍繞一個啟用AOT的控制反轉(IOC)架構設計的,可以在面對大型代碼庫時保持啟動時間。

此外,它還支援面向微服務的功能,如服務發現、跟蹤和容器化部署,是以Micronaut是現代Java開發的一個經過深思熟慮和引人注目的選擇。

Micronaut提供了一個基于Web的項目設計工具,您可以使用它來了解可以插入Micronaut核心的工具範圍。這個工具在精神上類似于Spring Initializr或jHipster的線上生成器,但它采用了自己的方式。Micronaut在其核心是反應式的,支援像RxJava和Reactor這樣的反應式實作,其他所有内容都建立在這個中心支柱之上。Micronaut包括自己的反應式HTTP用戶端。

Micronaut中的每個節點都是一個反應式元件,可以組合成更大的微服務架構,使用像ZooKeeper或Eureka這樣的中央服務代理。

Micronaut使得采用最佳實踐變得容易,它是一個類似于Spring的一站式架構,但更加專注于具體的實作細節。對于在基于Java的雲和無伺服器環境中工作的開發人員來說,這是一個令人心動的選擇。

▌MicroStream

在基于Java的面向對象持久性的演變中,MicroStream可能代表了最終的概念精煉。它以原樣接受您的運作時對象圖,并允許将其以面向對象程式設計語義持久化到任意數量的底層資料存儲中。

MicroStream允許您保持在對象和屬性的思維領域中,而架構則完成了大部分儲存和恢複工作。作為開發人員,您仍然需要考慮元關注點,如擷取政策和持久性邊界,但這些定義簡單,大部分不會幹擾應用程式代碼,應用程式代碼的工作方式與不考慮持久性時一樣。

MicroStream包括根的概念,它定義了持久化樹的根。一個應用程式可以有多個根,如表1所示。

清單1. MicroStream儲存和恢複資料

ini複制代碼// Saving
EmbeddedStorageManager manager =EmbeddedStorage.start();
manager.setRoot(myObject);
manager.storeRoot();
//Restoring
EmbeddedStorageManager storageEngine =EmbeddedStorage.start();
myObject =(MyClass) storageEngine.root();
           

MicroStream是Java中有趣的新的面向對象持久性方法,對于任何新項目來說都值得一看。

▌TeaVM

将Java編譯為Wasm(WebAssembly)仍然是一項前沿技術,但是TeaVM使得這一點成為可能。TeaVM支援将Java位元組碼轉換為JavaScript(類似于Google Web Toolkit)和Wasm。這些可以用于建立使用浏覽器内部的Java代碼和庫的Web應用程式。

TeaVM的工作原理是首先将代碼編譯為低級中間表示形式,然後進一步優化并将其轉換為WebAssembly指令。生成的代碼非常高效,可以在支援WebAssembly的任何現代浏覽器中運作。

TeaVM的主要優點之一是它對流行的Java架構(如Spring和Hibernate)的支援。開發人員可以使用這些架構建構複雜的全棧Web應用程式,然後将代碼編譯為Wasm以進行Web部署。

盡管TeaVM仍然是一個新興的項目——建立者在日常工作中使用它,然後将修複和改進推送到開源存儲庫——但它似乎是目前從Java到Wasm的最佳路徑。

總的來說,TeaVM是一個強大而靈活的工具,用于在Java中開發Web應用程式,并為在浏覽器和其他Wasm環境中使用Java提供了一個有趣的途徑。

▌Apache Flink

Flink于2011年開始,已經成長為領先的事件處理架構。許多知名公司如Airbnb和Netflix都在實時進行中使用它,并在相對容易管理的包中提供了很多強大的功能。

Apache Flink将容錯和狀态管理融入到分布式、容器友好的形式中。它可以自動縮放以處理動态負載。

雖然在Kubernetes中使用Docker運作Flink是典型的,但Flink也可以使用像Apache Beam這樣的架構在AWS Lambda、Azure Functions和Google Cloud Functions等無伺服器基礎設施上運作。這提供了隻支付處理期間使用的計算資源的好處,并允許更輕松、更高效的擴充。

Flink在内部具有很多功能,但簡單的東西相當容易了解。例如,在表2中,Flink監視端口9999上的套接字,并計算接收到的文本中的單詞,将資料輸出到控制台。

清單2. 使用Flink進行簡單文本處理

vbnet複制代碼DataStream<String> text = env.socketTextStream("localhost",9999);

DataStream<Tuple2<String,Integer>> wordCounts = text
.flatMap(newFlatMapFunction<String,Tuple2<String,Integer>>(){
publicvoid flatMap(String value,Collector<Tuple2<String,Integer>>out){
for(String word : value.split(" ")){
out.collect(newTuple2<String,Integer>(word,1));
}
}
})
.keyBy(0)
.sum(1);

wordCounts.print();
           

您可以看到Flink使用函數式風格,平台本身以可擴充、容錯的方式将功能擴充到雲基礎設施中。總的來說,這是一個處理實時事件處理的令人印象深刻的項目。

作者:Matthew Tyson

更多技術幹貨請關注公号“雲原生資料庫”

squids.cn,基于公有雲基礎資源,提供雲上 RDS,雲備份,雲遷移,SQL 視窗門戶企業功能,

幫助企業快速建構雲上資料庫融合生态。