🚀 HTTP-клиенты в Spring Boot через @HttpExchange
Описываете внешний API обычным Java-интерфейсом:
@HttpExchange("https://api.example.com")
public interface UserClient {
@GetExchange("/users/{id}")
User findById(@PathVariable Long id);
@PostExchange("/users")
User create(@RequestBody User user);
}
Spring сам создаёт реализацию клиента, после чего его можно внедрять как обычный bean.
Таймауты, SSL и другие параметры настраиваются через spring.http.clients.*.
Меньше шаблонного кода, понятный контракт и удобное тестирование.
#SpringBoot4 #Java #HttpExchange
Описываете внешний API обычным Java-интерфейсом:
@HttpExchange("https://api.example.com")
public interface UserClient {
@GetExchange("/users/{id}")
User findById(@PathVariable Long id);
@PostExchange("/users")
User create(@RequestBody User user);
}
Spring сам создаёт реализацию клиента, после чего его можно внедрять как обычный bean.
Таймауты, SSL и другие параметры настраиваются через spring.http.clients.*.
Меньше шаблонного кода, понятный контракт и удобное тестирование.
#SpringBoot4 #Java #HttpExchange
🔥13👍6❤2
💡 Spring Boot 4: найдите устаревшие настройки до того, как они сломают запуск
При миграции на Spring Boot 4 часть старых configuration properties была переименована или удалена. Проверять большие
Gradle:
Maven:
При запуске приложения migrator:
- найдёт устаревшие ключи;
- покажет новые названия в логах;
- временно подменит свойства во время выполнения.
Важный нюанс: модуль не переписывает конфигурационные файлы. Исправьте ключи вручную, снова запустите приложение и удалите зависимость.
#SpringBoot4 #Java #Migration
При миграции на Spring Boot 4 часть старых configuration properties была переименована или удалена. Проверять большие
application.yml вручную необязательно — добавьте временный модуль:Gradle:
runtimeOnly("org.springframework.boot:spring-boot-properties-migrator")
Maven:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-properties-migrator</artifactId>
<scope>runtime</scope>
</dependency>
При запуске приложения migrator:
- найдёт устаревшие ключи;
- покажет новые названия в логах;
- временно подменит свойства во время выполнения.
Важный нюанс: модуль не переписывает конфигурационные файлы. Исправьте ключи вручную, снова запустите приложение и удалите зависимость.
properties-migrator — это временный помощник для миграции, а не библиотека, которую стоит оставлять в production.#SpringBoot4 #Java #Migration
🔥14👍3❤1
Причина простая: Spring Boot 4 перешёл на Servlet 6.1, а Undertow с этой версией Servlet API несовместим. Поэтому из Boot 4 удалили и поддержку embedded Undertow, и
spring-boot-starter-undertow.Если раньше было:
<artifactId>spring-boot-starter-undertow</artifactId>
теперь используйте Tomcat по умолчанию или подключайте Jetty:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
Ещё один важный момент: не разворачивайте Spring Boot 4 в старом Servlet-контейнере — требуется совместимость с Servlet 6.1.
Перед миграцией Boot 3 → 4 обязательно проверьте серверную часть приложения.
#SpringBoot4 #Java #Servlet
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1🔥1
⚡️ Spring Boot 4: для интеграционных тестов REST лучше переходить с
Почему это удобнее:
- fluent API в стиле
- одинаковый подход для тестов через
- проще читать цепочки
- меньше привязки к старому
Пример:
Если автоконфигурация не подтянулась автоматически, добавляем:
Если начинаете новый проект на Boot 4, TestRestTemplate уже вряд ли стоит выбирать по привычке.
#SpringBoot4 #Java #RestTestClient #Testing
TestRestTemplate на RestTestClient.Почему это удобнее:
- fluent API в стиле
RestClient;- одинаковый подход для тестов через
MockMvc и реальный HTTP-порт;- проще читать цепочки
request → response → assertions;- меньше привязки к старому
TestRestTemplate.Пример:
restTestClient.get()
.uri("/api/users/42")
.exchange()
.expectStatus().isOk()
.expectBody(User.class)
.value(user -> assertThat(user.id()).isEqualTo(42));
Если автоконфигурация не подтянулась автоматически, добавляем:
@AutoConfigureRestTestClient
Если начинаете новый проект на Boot 4, TestRestTemplate уже вряд ли стоит выбирать по привычке.
#SpringBoot4 #Java #RestTestClient #Testing
👍7❤1🔥1
☕️ В Spring Boot 4 появился новый
Главное отличие - fluent API, из-за которого код отправки и получения сообщений становится заметно чище.
При этом
Для старых проектов переписывать ничего не нужно, а для нового JMS-кода Spring теперь рекомендует смотреть в сторону
#SpringBoot4 #JMS
JmsClient - более современная альтернатива привычному JmsTemplate.Главное отличие - fluent API, из-за которого код отправки и получения сообщений становится заметно чище.
При этом
JmsTemplate никуда не исчезает и продолжает работать без изменений.Для старых проектов переписывать ничего не нужно, а для нового JMS-кода Spring теперь рекомендует смотреть в сторону
JmsClient.#SpringBoot4 #JMS
👍4❤1🔥1
В Spring Boot 4 появилась полезная штука для конфигурации больших проектов.
@ConfigurationPropertiesSource позволяет генерировать metadata для типов, которые находятся не в текущем модуле, а, например, в общей библиотеке или отдельном starter-модуле.Раньше с такими внешними типами IDE-подсказки для
application.yml и application.properties могли быть неполными или вообще отсутствовать.Теперь можно явно указать источник конфигурационных свойств и получить нормальную metadata даже для внешних классов.
Особенно полезно для:
— multi-module проектов
— внутренних Spring Boot starter'ов
— shared configuration libraries
— больших платформенных команд
Мелкая фича, но для DX в крупных Spring Boot проектах очень приятная.
#SpringBoot4 #Config
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5🎉3❤2👍1
Теперь команды Redis можно автоматически связывать с метриками и трассировками:
- latency операций
- spans для Redis-команд
- ошибки и длительность запросов
- интеграция с общей системой наблюдаемости приложения
Особенно удобно использовать это вместе с OpenTelemetry starter, чтобы Redis сразу попадал в единый tracing и metrics pipeline.
Для продакшена это полезно тем, что проблемы Redis можно видеть не отдельно, а прямо внутри полного пути запроса через приложение.
#SpringBoot4 #Redis
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤4🔥4
🚀 Spring Boot 4 получил полноценную поддержку Kotlin Serialization
Теперь для
Что он делает:
- автоматически создаёт
- регистрирует HTTP message converter
- позволяет настраивать сериализацию через
- работает с привычными
Пример настройки:
Для Kotlin-проектов на Spring Boot это убирает лишнюю ручную конфигурацию и делает
#SpringBoot4 #Kotlin
Теперь для
kotlinx.serialization есть отдельный starter:spring-boot-starter-kotlinx-serialization-jsonЧто он делает:
- автоматически создаёт
Json bean- регистрирует HTTP message converter
- позволяет настраивать сериализацию через
spring.kotlinx.serialization.json.*- работает с привычными
@Serializable data classПример настройки:
pretty-print: trueignore-unknown-keys: trueДля Kotlin-проектов на Spring Boot это убирает лишнюю ручную конфигурацию и делает
kotlinx.serialization полноценной альтернативой Jackson.#SpringBoot4 #Kotlin
👍7❤3🔥2
🚀 Spring Boot 4 получил отдельный starter для
Теперь imperative HTTP-клиент можно подключать через:
Для реактивного
А настройки HTTP-клиентов собраны под единым префиксом:
То есть конфигурация стала понятнее, а выбор между imperative и reactive подходом — более явным.
#SpringBoot4 #RestClient #Java
RestClientТеперь imperative HTTP-клиент можно подключать через:
spring-boot-starter-restclientДля реактивного
WebClient используется:spring-boot-starter-webclientА настройки HTTP-клиентов собраны под единым префиксом:
spring.http.clients.*То есть конфигурация стала понятнее, а выбор между imperative и reactive подходом — более явным.
#SpringBoot4 #RestClient #Java
❤7👍4🔥4🎉1
Spring Boot 4: как перенести старые настройки
При обновлении добавьте временную зависимость:
После запуска приложения migrator:
* найдёт устаревшие и переименованные параметры;
* выведет подсказки в логах;
* временно преобразует старые ключи во время выполнения.
Исправьте настройки в
#SpringBoot4 #Migration
При обновлении добавьте временную зависимость:
После запуска приложения migrator:
* найдёт устаревшие и переименованные параметры;
* выведет подсказки в логах;
* временно преобразует старые ключи во время выполнения.
Исправьте настройки в
#SpringBoot4 #Migration
При обновлении добавьте временную зависимость:
runtimeOnly("org.springframework.boot:spring-boot-properties-migrator")
После запуска приложения migrator:
* найдёт устаревшие и переименованные параметры;
* выведет подсказки в логах;
* временно преобразует старые ключи во время выполнения.
Исправьте настройки в
application.properties или application.yaml, убедитесь, что предупреждения исчезли, и удалите зависимость. Оставлять её в проекте постоянно не нужно.#SpringBoot4 #Migration
При обновлении добавьте временную зависимость:
runtimeOnly("org.springframework.boot:spring-boot-properties-migrator")
После запуска приложения migrator:
* найдёт устаревшие и переименованные параметры;
* выведет подсказки в логах;
* временно преобразует старые ключи во время выполнения.
Исправьте настройки в
application.properties или application.yaml, убедитесь, что предупреждения исчезли, и удалите зависимость. Оставлять её в проекте постоянно не нужно.#SpringBoot4 #Migration
👍8❤5🤩2🥰1