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

Автор оригинала: spring.io
  • Перевод

Для будущих учащихся на курсе "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»

OTUS
Цифровые навыки от ведущих экспертов

Похожие публикации

Комментарии 1

    0

    Это конечно хорошо, что создатели Spring, наконец, поняли, что программная конфигурация намного проще и удобнее, нежели простыня xml или магические @заклинания ввиде аннотаций. И стоит отметить, что еще 13 лет назад Google Guice уже вовсю использовал оную, когда Spring-гуру уже считали данный подход безнадежно устаревшим.

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

    Самое читаемое