Spring Fu 0.3.0 及之後版本

發布 | Sébastien Deleuze | 2020 年 5 月 28 日 | ...

很高興宣布 Spring Fu 0.3.0 已發布。 提醒您,Spring Fu 是一個 Spring Boot 程式化配置的孵化器,它使用 DSL 以程式碼宣告方式明確配置它,並透過自動完成功能實現出色的可探索性。

JaFu 回來了!

這個新的里程碑除了 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)

比較 JaFu 和 Kofu

由於 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 個配置切片 webConfigloggingConfigmyFeatureConfig

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 里程碑 將側重於

與往常一樣,歡迎提供回饋意見。 請注意,目前我們主要關注於獲得正確的軟體設計和 API,而不是廣泛涵蓋更多功能。

獲取 Spring 電子報

隨時關注 Spring 電子報

訂閱

搶先一步

VMware 提供培訓和認證,以加速您的進度。

了解更多

取得支援

Tanzu Spring 在一個簡單的訂閱中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位檔案。

了解更多

即將舉行的活動

查看 Spring 社群中所有即將舉行的活動。

檢視全部