Открытый проект Spring Boot 4.
Программа. Репозиторий
Новый функционал
Кэширование при авторизации через UserCache
Примечание: этот функционал был в прошлых версиях Spring Boot, просто мы добавляем его в наш проект.
Реализовать кэширование авторизованного пользователя можно через
Apply patch boot4_1_userCache.patch
@Caching / @CacheEvict или использовать механизм UserCache, который дает бОльшую гибкость.
В проекте у нас уже есть зависимость
Caffeine Cache и в application.yaml уже объявлен cache-names: users.
Добавим UserCache (stackoverflow):
- В
SecurityConfigобъявляем отдельный бинUserCache, реализованный через стандартныйSpringCacheBasedUserCache- обертку дляUserDetailsнад текущей реализацией кэширования. UserDetailsServiceобертываемCachingUserDetailsService, в который сеттимuserCache()- Обязательный пункт - устанавливаем, что после запроса креденшелы в экземпляре
UserDetailsне чистятся (он находится в кэше, с обнуленным паролем следующие запросы не пройдут) - Используя бин
UserCache, инвалидируем в контроллерах пользователя в кэше при его изменении - Пришлось исправить баг в тестах: в реализации
AdminUserController#deleteдля очистки кэша мы теперь достаем пользователя поidи, т.к. все тесты вAbstractControllerTestоборачиваются в@Transactionalчтобы база не менялась, в тестеAdminUserControllerTest#deleteпользователь остается в кэше транзакции теста и новый запросfindById(USER_ID)не выполняется (можно проверить, откатив изменения в тесте). Решил через получения пользователя черезfindByEmailIgnoreCase.
API Versioning
В Spring 7 появилась долгожданная официальная поддержка нативного API Versioning.
Добавим ее в наш проект:
Apply patch boot4_2_version.patch
-
Вместо
application.yamlоказалось удобнее все сконфигурировать вWebConfig, версии и значение заголовка можно вынести в константы. Чтобы страничка Swagger REST OpenAPI не бросалаMissingApiVersionException, нужно в конфигурацию добавить.setVersionRequired(false)или.setDefaultVersion(CURRENT_VERSION)(или обе настройки). -
В
@RequestMappingконтроллеров добавляем версию. -
Без
setVersionRequired / setDefaultVersionтесты также не будут проходить. Тк. в проекте все запросы в тестах проходят черезAbstractControllerTest#perform, в соответствии с Testing versioned APIs, сделаем реализацию простым добавлением заголовка версионирования в этом методе.
Проверьте, что теперь во всех запросах Swagger теперь автоматически появилось версионирование:

Maven 4
В IntelliJ IDEA 2025.2 уже появилась поддержка Maven 4, попробуем использовать его для сборки.
Apply patch boot4_3_maven4.patch
- В Apache Archive Distribution Directory находим и скачиваем последнюю версию, например в 4.0.0-rc-5/binaries/.
- В
pom.xmlменяемmodelVersionна4.1.0 - Меняем в проекте настройки Maven и пересобираем проект. При сборке выходит предупреждение:
У нас проект не многомодульный, добавляем в заголовокCreate a .mvn directory in the root directory or add the root="true" attribute on the root project's model to identify it.root="true"