领先一步
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 原生镜像。
两位优秀的新的贡献者加入了团队:专注于 KoFu 的 Audrey Neveu 和专注于 JaFu 的 Arjen Poutsma。欢迎他们!
这个新版本也是各种改进的机会,例如 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 创建的一个实验性项目)替换 autoconfigure-adapter 模块,该项目会自动将 Spring Boot 自动配置转换为功能性 Bean 注册。
无需反射配置的 GraalVM 原生支持(取决于 oracle/graal#2500)
改进的 DSL 可扩展性
使用 JaFu、GraalVM 原生和 Knative 的扩展到零应用程序示例
利用 Spring Framework 5.3 M1 默认情况下移除 XML 和 SpEL 支持
通过 Spring Security 5.3 官方 Kotlin DSL 提供 Spring Security 支持
像往常一样,欢迎提供反馈。请注意,目前我们主要关注获得正确的软件设计和 API,而不是广泛覆盖更多功能。