
譯者 | 核子可樂
審校 | 重樓
Java微框架素以輕量化、極簡設(shè)計聞名,專注于性能、云原生功能與開發(fā)者體驗,不僅適用于構(gòu)建輕量級Web應(yīng)用程序,且特別適配微服務(wù)架構(gòu)。除了最主流的Spring Boot之外,更有多種框架能夠滿足不同需求。本文簡要介紹七款功能獨特、簡潔易用的Java微框架。
框架 | 人氣(GitHub星數(shù)) | 關(guān)鍵優(yōu)勢 | GitHub鏈接 |
Spring Boot | ~78.2K | 行業(yè)標(biāo)準,輕量化 | |
Quarkus | ~14.8K | 快速啟動,低內(nèi)存占用 | |
Vert.x | ~14.6K | 高并發(fā),非阻塞 | |
Ktor | ~13.9K | 協(xié)程設(shè)計,高靈活性 | |
Dropwizard | ~8.4K | 穩(wěn)定,“內(nèi)置battery” | |
Javalin | ~8K | 極致簡潔,API精簡 | |
Micronaut | ~6.3K | 無reflection,高效 | |
Helidon | ~3.7K | 由甲骨文支持,符合標(biāo)準 |
Quarkus
Quarkus是一款現(xiàn)代云原生框架,擁有出色的開發(fā)模式、功能豐富的可插拔架構(gòu),可基于GaalVM或Mandrel實現(xiàn)原生構(gòu)建,尤其適合熟悉Spring并希望快速啟動及原生編譯的開發(fā)者。
Quarkus還提供CLI。在安裝完成后,用戶可使用quarkus create開發(fā)應(yīng)用程序。若以開發(fā)模式啟動應(yīng)用程序,框架還會熱部署代碼變更并生成開發(fā)控制臺:

Quarkus提供多種擴展,包括日志記錄、指標(biāo)、身份驗證及數(shù)據(jù)存儲。開發(fā)者可使用UI進行管理,并通過CLI進行添加和刪除。
Quarkus通過Vert.x支持命令式及響應(yīng)式編程,允許大家在同一應(yīng)用之內(nèi)使用這兩種編程風(fēng)格,且直接支持端點虛擬線程。
Quarkus還提供基于Jakarta EE標(biāo)準的CDI注入框架,在構(gòu)建時解析這些依賴項,以避免因運行時解析而引發(fā)的速度減慢。
以下為Quarkus中的簡單端點:
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "Hello from InfoWorld!";
}
}Quarkus完美契合開發(fā)需求,且提供豐富的額外功能,是一套簡潔但功能多樣、注重開發(fā)者體驗的框架方案。
Vert.x
Vert.x是Java中最早也最成熟的響應(yīng)式框架之一,可創(chuàng)建高性能響應(yīng)式管線所需要的一切,尤其適合需要以高性能處理高吞吐量數(shù)據(jù)流的項目。
Vert.x與其說是一套框架,不如說是一套用于編寫響應(yīng)式流的精簡工具。包括Quarkus在內(nèi)的多種工具和框架都以Vert.x為構(gòu)建基礎(chǔ),可提供強大且廣泛的功能選項。
Vert.x基于事件循環(huán)架構(gòu),旨在盡量減少CPU閑置。在此架構(gòu)之上,Vert.x提供多種異步編程處理方式,還支持RxJava中的大量操作符與復(fù)雜的響應(yīng)式結(jié)構(gòu)。
雖然Vert.x使用事件循環(huán),但卻并不局限于單線程,允許開發(fā)者同時實現(xiàn)異步處理與多線程處理。在這種多Reactor機制中,每個CPU核心往往對應(yīng)一個事件線程(遠優(yōu)于Node等框架)。此外,我們還可以微調(diào)應(yīng)用以創(chuàng)建多個handler類(即verticles),以在單個節(jié)點內(nèi)進行擴展。
Vert.x還支持Kotlin語言,允許原生使用Kotlin協(xié)程進行異步事件處理。Vert.x支持的其他語言包括Groovy、Ruby、Java,并可通過WebSocket在客戶端上使用JavaScript。
以下為Vert.x端點示例:
import io.vertx.core.AbstractVerticle;
import io.vertx.core.Promise;
public class MainVerticle extends AbstractVerticle {
@Override
public void start(Promise<Void> startPromise) throws Exception {
vertx.createHttpServer().requestHandler(req -> {
req.response()
.putHeader("content-type", "text/plain")
.end("Hello from Vert.x!");
}).listen(8888, http -> {
if (http.succeeded()) {
startPromise.complete();
System.out.println("HTTP server started on port 8888");
} else {
startPromise.fail(http.cause());
}
});
}
}Vert.x還提供復(fù)雜的事件總線,可在微服務(wù)應(yīng)用的節(jié)點內(nèi)與節(jié)點間進行通信。我們可以將事件總線視為Vert.x節(jié)點的輕量級分布式消息系統(tǒng)。如果需要升級至持久化消息代理,Vert.x還支持包括RabbitMQ在內(nèi)的多種集成。
Vert.x還為許多常用數(shù)據(jù)庫(如MongoDB)提供設(shè)計精良且性能卓越的連接器,以及與這些數(shù)據(jù)存儲集成的授權(quán)與身份驗證組件。
與Spring Initializr類似,Vert.x還提供基于Web的工具以構(gòu)建新應(yīng)用:

在需要消費、連接和生成實時數(shù)據(jù)流的場景下,Vert.x堪稱絕佳選擇,也是Java生態(tài)中最先進、最成熟的響應(yīng)式平臺之一。
Ktor
Ktor是由Jetbrains專為Kotlin構(gòu)建的獨特框架,提供一系列面向Web開發(fā)的可組合功能,并利用Kotlin協(xié)程進行異步編程。
Ktor CLI包含功能完備的創(chuàng)建向?qū)В捎糜趩有聭?yīng)用(ktor new):

Ktor是一套模塊化框架,支持多種插件(即features)。除依賴注入引擎koin之外,還提供監(jiān)控、管理、數(shù)據(jù)存儲連接器與安全等多種功能,且全部整合在Ktor統(tǒng)一框架之下。
Ktor提供強大功能,包括用于生成HTML的Kotlin DSL——一種常用且便捷的數(shù)據(jù)驅(qū)動標(biāo)記生成方法。Ktor最強大的功能,在于它隱式使用到Kotlin協(xié)程,能夠透明地讓非阻塞異步操作趨近于同步操作。例如,以下代碼看似阻塞(在client.get()調(diào)用當(dāng)中),但實際上卻是完全異步的:
import io.ktor.client.*
//... other imports
routing {
get("/") {
try {
// Implicit coroutine use:
val book = client.get("https://anapioficeandfire.com/api/books/1").body<Book>()
call.respond(book)
} catch (e: Exception) {
call.respondText("Error fetching book: ${e.message}")
}
}
}Ktor是一款功能全面的工具,可用于構(gòu)建各種服務(wù)器端Kotlin功能。雖然其最出名的功能是將協(xié)程引入Web server,但其他方面的表現(xiàn)也不落下風(fēng),尤其適合對功能完備性要求較高的Kotlin開發(fā)者。
Dropwizard
Dropwizard是一款成熟的輕量級框架,專為云環(huán)境中的現(xiàn)代RESTful服務(wù)而設(shè)計。除了在應(yīng)用中嵌入Jetty server以支持獨立可運行對象之外,它還整合了用于JSON的Jackson和用于端點定義的Jersey。除此之外,開發(fā)者還可添加組件以處理持久性及其他常見的應(yīng)用需求。
Dropwizard最重要的功能之一,是其基于Metrics(由項目團隊構(gòu)建的庫)的內(nèi)置運維指標(biāo)。Metrics是一款功能完備的監(jiān)控工具,可與應(yīng)用相集成,并提供Graphite等常見庫依賴項與后端。
Dropwizard本質(zhì)上是一套膠水框架,將眾多項目整合到統(tǒng)一的軟件包內(nèi),消除了自行編排的麻煩過程:

以下是Dropwizard中的端點:
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
@Path("/hello")
@Produces(MediaType.TEXT_PLAIN)
public class HelloResource {
@GET
public String sayHello() {
return "Hello from InfoWorld!";
}
}可以看到,Dropwizard將大部分路由任務(wù)交給了來自Jakarta項目的Jersey。
Dropwizard是一套囊括多種一流工具的輕量化、統(tǒng)一且支持云環(huán)境的框架,且高度重視穩(wěn)定性和監(jiān)控功能。
Javalin
Javalin是一款微框架,適合追求極致簡潔的開發(fā)者。
Javalin是SparkJava的繼任者,后者又是首批面向JVM的開源微框架之一,更多強調(diào)簡潔性與靈活性。與其他現(xiàn)代框架不同,Javalin力求不帶任何立場,而且在定位上更類似于庫。由于Javalin盡力避免隱藏的依賴關(guān)系(即magic),并將所有內(nèi)容明確在代碼中做出描述,因此不再提供依賴注入或代碼掃描。
與Dropwizard類似,Javalin也嵌入了Jetty server,借此提供高度可靠且性能出色的HTTP平臺:

這是一套支持Java和Kotlin的多語言框架,下面來看用Kotlin編寫的簡單Hello World服務(wù)器:
import io.javalin.Javalin
fun main() {
val app = Javalin.create(/*config*/)
.get("/") { ctx -> ctx.result("Hello World") }
.start(7070)
}以下為Java版本:
import io.javalin.Javalin;
public class App {
public static void main(String[] args) {
var app = Javalin.create()
.get("/", ctx -> ctx.result("Hello World"))
.start(7070);
}
}可以看到,其方法轉(zhuǎn)換流暢、代碼簡潔,允許同時描述服務(wù)器定義與端點。
Javalin避免了代碼臃腫和其他不必要的依賴語法。如果大家需要一款極簡框架來完成工作,Javalin也許正是最佳選項。
Micronaut
如果大家對啟動時間非常關(guān)注,或者需要一款可以構(gòu)建微服務(wù)和無服務(wù)器應(yīng)用的多語言全棧框架,那么Micronaut絕對值得一試。它提供AOT編譯器,無需reflection即可實現(xiàn)高性能與依賴注入,既可在JVM中運行、也可通過GraalVM編譯為原生鏡像。
Micronaut IoC(控制反轉(zhuǎn))容器會在編譯期間解析所有依賴項,借此縮短啟動時間,更好地匹配微服務(wù)設(shè)計需求。這樣也能讓依賴注入的內(nèi)存占用量更小。
Micronaut支持多種語言,包括Java、Groovy和Kotlin,后續(xù)還計劃支持Scala。

Micronaut專為云環(huán)境設(shè)計,能夠與K8s等自動集成服務(wù)發(fā)現(xiàn)功能,且支持Jaeger等跟蹤功能。如此無需硬編碼,即可通過配置自動發(fā)現(xiàn)和跟蹤來設(shè)計微服務(wù)。它還支持Consul等分布式配置。
Micronaut內(nèi)置數(shù)據(jù)存儲連接器,且支持數(shù)據(jù)訪問層與OpenAPI描述符。
盡管Micronaut擁有諸多高級功能,但其端點仍保持了簡潔易讀:
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
@Controller("/hello")
public class HelloController {
@Get("/{name}")
public String hello(String name) {
return "Hello, " + name;
}
}Micronaut是微服務(wù)的理想之選,致力于讓開發(fā)過程盡量輕松,堪稱Java生態(tài)中最精細的微服務(wù)框架。
Helidon
Helidon最適合的,是那些希望遵循Java標(biāo)準、面向企業(yè)環(huán)境使用,并擁有豐富框架類型選擇的開發(fā)者。
Helidon既是本文中最年輕的框架選項,也是甲骨文的官方項目。它在設(shè)計之初就引入了虛擬線程和構(gòu)建時依賴注入,最近還添加了AI相關(guān)功能。

Helidon提供兩個版本:
- SE(標(biāo)準版):用于構(gòu)建函數(shù)式編程(FP)微服務(wù)的基礎(chǔ)工具集合。專注于極小的內(nèi)存占用和快速啟動,且從Helidon 4開始默認使用虛擬線程。
- MP(MicroProfile):基于SE構(gòu)建并提供增值功能,包括依賴注入和JAX-RS/JSON-P等Jakarta EE組件。
Helidon SE與Javalin類似,MP則在理念和功能設(shè)計上更接近Quarkus。采用虛擬線程意味著省去了復(fù)雜的并發(fā)模型,因此應(yīng)用節(jié)點更易于理解和管理。
下面來看Helidon SE端點示例:
import io.helidon.webserver.WebServer;
import io.helidon.webserver.http.HttpRouting;
public class Main {
public static void main(String[] args) {
HttpRouting routing = HttpRouting.builder()
.get("/hello", (req, res) -> res.send("Hello from InfoWorld!"))
.build();
WebServer.builder()
.routing(routing)
.port(8080)
.build()
.start();
}
}Helidon最核心的優(yōu)勢在于符合甲骨文標(biāo)準,并提供多種模型選擇。無論是選擇SE進行簡單DIY,還是選擇MP擁有完善的一體化框架,Helidon都擁有不俗的吸引力。
總結(jié)
Java生態(tài)極其豐富,能夠?qū)崿F(xiàn)從簡單API到復(fù)雜微服務(wù)集群、無服務(wù)器部署乃至全棧應(yīng)用的各類現(xiàn)代云環(huán)境開發(fā)需求。本文列出的所有微框架都非常可靠,如果你不知如何選擇,可以先確定一、兩種最符合需求的框架,然后深入研究代碼。它們在功能性上各具優(yōu)勢,也許最終考驗的會是其各不相同的開發(fā)體驗。
原文標(biāo)題:The best Java microframeworks to learn now,作者:Matthew Tyson




























