Для будущих учащихся на курсе «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() }
Срезы конфигурации
Вся прелесть этого подхода заключается в том, что вы можете определить собственные срезы конфигурации и собрать их как угодно. Для примера выделим три среза конфигурации webConfig, loggingConfig и 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 мы планируем следующие нововведения:
-
Замена модуля autoconfigure-adapter на spring-init — экспериментальный проект, авторами которого являются Дейв Сиер (Dave Syer) и Энди Клемент (Andy Clement). Этот модуль автоматически трансформирует автоконфигурации Spring Boot в функциональную регистрацию бинов.
-
Нативная поддержка GraalVM без настройки рефлексии (зависит от oracle/graal#2500).
-
Новые расширенные возможности DSL.
-
Модель приложения, которое может масштабироваться до нуля с помощью JaFu, нативного образа GraalVM и Knative.
-
Реализация Spring Framework 5.3 M1, позволяющая отключить по умолчанию поддержку XML и SpEL.
-
Поддержка Spring Security через официальный DSL Kotlin Spring Security 5.3.
Будем рады вашим отзывам. Стоит отметить, что сейчас мы занимаемся в основном дизайном и API наших программ и не стремимся внедрить много новых функций.
Узнать подробнее о курсе «Kotlin Backend Developer«
Смотреть вебинар «Использование GraphQL в разработке бэкенд на Kotlin»
ссылка на оригинал статьи https://habr.com/ru/company/otus/blog/555292/
Добавить комментарий