搶先一步
VMware 提供培訓和認證,以加速您的進度。
了解更多很高興宣布 Spring Fu 0.3.0 已發布。 提醒您,Spring Fu 是一個 Spring Boot 程式化配置的孵化器,它使用 DSL 以程式碼宣告方式明確配置它,並透過自動完成功能實現出色的可探索性。
這個新的里程碑除了 KoFu (Kotlin DSL) 之外,還帶回了 JaFu (Java DSL)。 JaFu 在 0.1.0 版本中被移除,因為當時我沒有足夠的頻寬來支援 Java 和 Kotlin DSL,而且就 API 而言,我不確定 Java 變體是否具有足夠的吸引力來證明這種努力是合理的,但由於各種原因,我已經改變了主意
我收到了很多要求將其恢復的請求
Java 作為一種語言,發展速度更快
對於 Java 和 Kotlin 開發人員來說,更好地控制配置的應用方式也很有趣
函數式方法在 JVM 上自然非常有效,並且非常適合 GraalVM native images
有 2 位優秀的新貢獻者加入了團隊:Audrey Neveu 專注於 KoFu,Arjen Poutsma 專注於 JaFu。 歡迎加入!
這個新版本也是進行各種改進的機會,例如 Spring Boot 2.3.0 基準線或 API 改進,請參閱詳細的變更日誌 此處。
Spring Fu 0.3.0 還提供了額外的優化,僅啟用函數式 Web 基礎結構,因此在我的筆記型電腦上,使用 OpenJDK 11 可以獲得非常快的啟動時間:Started Application in 0.673 seconds (JVM running for 0.898)
。
由於 Spring MVC 現在可以透過函數式方式用於 Java 和 Kotlin,讓我們看看使用這些 DSL 配置的最小 Spring Boot Web 應用程式是什麼樣子的。
使用 JaFu
public class Application {
public static JafuApplication app = webApplication(a -> a.beans(b -> b
.bean(SampleHandler.class)
.bean(SampleService.class))
.enable(webMvc(w -> w
.port(w.profiles().contains("test") ? 8181 : 8080)
.router(router -> {
SampleHandler handler = w.ref(SampleHandler.class);
router
.GET("/", handler::hello)
.GET("/api", handler::json);
}).converters(c -> c
.string()
.jackson(j -> j.indentOutput(true))))));
public static void main (String[] args) {
app.run(args);
}
}
使用 KoFu
val app = webApplication {
beans {
bean<SampleService>()
bean<SampleHandler>()
}
webMvc {
port = if (profiles.contains("test")) 8181 else 8080
router {
val handler = ref<SampleHandler>()
GET("/", handler::hello)
GET("/api", handler::json)
}
converters {
string()
jackson {
indentOutput = false
}
}
}
}
fun main() {
app.run()
}
這種配置模型的威力在於您可以定義自己的配置切片並根據需要組裝它們。 例如,讓我們定義 3 個配置切片 webConfig
、loggingConfig
和 myFeatureConfig
val webConfig = configuration {
webMvc {
// ...
}
}
val loggingConfig = configuration {
logging {
level = LogLevel.WARN
}
}
val myFeatureConfig = configuration {
beans {
// ...
}
cassandra {
// ...
}
}
然後,您可以將它們全部用於您的常規 Web 應用程式
val webApp = webApplication {
enable(loggingConfig)
enable(myFeatureConfig)
enable(webConfig)
}
fun main() {
webApp.run()
}
但是,您也可以僅使用一個子集進行整合測試,例如
@Test
fun `My feature integration test`() {
val testApp = application {
enable(loggingConfig)
enable(myFeatureConfig)
}
// ...
}
就路線圖而言,下一個 0.4.0 里程碑 將側重於
透過利用 spring-init (由 Dave Syer 和 Andy Clement 創建的一個實驗性專案,可自動將 Spring Boot 自動配置轉換為函數式 Bean 註冊) 來取代 autoconfigure-adapter 模組。
無需反射配置的 GraalVM native 支援 (取決於 oracle/graal#2500)
改進的 DSL 可擴充性
使用 JaFu、GraalVM native 和 Knative 的 Scale-to-zero 應用程式範例
利用 Spring Framework 5.3 M1 預設移除 XML 和 SpEL 支援
透過 Spring Security 5.3 官方 Kotlin DSL 提供的 Spring Security 支援
與往常一樣,歡迎提供回饋意見。 請注意,目前我們主要關注於獲得正確的軟體設計和 API,而不是廣泛涵蓋更多功能。