Spring Fu 0.3.0 и не только

от автора

Для будущих учащихся на курсе «Kotlin Backend Developer« подготовили перевод материала.

Также приглашаем всех желающих на открытый демо-урок «Использование GraphQL в разработке бэкенд на Kotlin». На этом вебинаре проведем обзор технологии GraphQL, рассмотрим существующие решения для Kotlin и примеры серверной и клиентской реализации с ktor и graphql-kotlin.


Спешу поделиться радостной новостью — наконец-то вышел Spring Fu версии 0.3.0. Напомню, что это инкубатор для программного конфигурирования Spring Boot с использованием DSL. Он позволяет декларативно задавать конфигурацию в самом коде, предлагая отличную обнаруживаемость посредством автозавершения.

JaFu возвращается!

Теперь мы снова можем использовать JaFu (DSL Java) наряду с KoFu (DSL Kotlin). Я отказался от JaFu в версии 0.1.0, потому что на тот момент мне не хватало ресурсов для поддержки двух DSL — Java и Kotlin. Что касается API, я не был уверен, что вариант на Java стоил моих усилий, но я передумал по нескольким причинам:

  • Многие пользователи просили вернуть его.

  • Java быстро развивается.

  • JaFu позволяет лучше контролировать применение конфигурации, что делает его полезным не только для Java-разработчиков, но и для Kotlin-разработчиков.

  • Функциональный подход очень эффективен при работе с JVM и нативными образами GraalVM.

  • К нашей команде присоединились два новых специалиста: Одри Неве (Audrey Neveu) работает над KoFu, а Арьен Путсма (Arjen Poutsma) — над JaFu. Добро пожаловать!

Другие улучшения

С выходом новой версии появилась возможность создать базовую линию Spring Boot 2.3.0 и улучшить API. Подробнее об изменениях написано тут.

Благодаря дополнительной оптимизации Spring Fu 0.3.0 позволяет использовать только функциональную веб-инфраструктуру, поэтому на моем ноутбуке OpenJDK 11 запускается очень быстро: Started Application in 0.673 seconds (JVM running for 0.898).

Сравнение JaFu и Kofu

Spring MVC позволяет использовать функциональный подход как для Java, так и для Kotlin. Давайте посмотрим, как выглядит самое простое веб-приложение Spring Boot, созданное с помощью этих DSL.

На 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() }

Срезы конфигурации

Вся прелесть этого подхода заключается в том, что вы можете определить собственные срезы конфигурации и собрать их как угодно. Для примера выделим три среза конфигурации webConfigloggingConfig и myFeatureConfig:

val webConfig = configuration {     webMvc {         // ...     } }  val loggingConfig = configuration {     logging {         level = LogLevel.WARN     } }  val myFeatureConfig = configuration {     beans {         // ...     }     cassandra {         // ...     } }

В дальнейшем вы можете использовать их все в обычном веб-приложении:

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 наших программ и не стремимся внедрить много новых функций.


Узнать подробнее о курсе «Kotlin Backend Developer«

Смотреть вебинар «Использование GraphQL в разработке бэкенд на Kotlin»

ссылка на оригинал статьи https://habr.com/ru/company/otus/blog/555292/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *