Готовый сервис рекомендаций фильмов на Spring Boot 3.2 c инфраструктурой, настроенной «как в продакшене»: миграции Flyway, контейнеризация, логирование и базовая документация.
- Java 21, Spring Boot 3.2
- PostgreSQL 16 + Flyway
- Gradle 8 (обёртка
./gradlew) - Docker / Docker Compose
- Установите Java 21 и Docker.
- Соберите артефакт:
./gradlew clean build
- Поднимите приложение и базу через Docker Compose:
Сервис будет доступен на
docker-compose up --build
http://localhost:8080, база — наlocalhost:5432.
- Поднимите PostgreSQL 16 локально и создайте базу
filmorate. - Экспортируйте переменные окружения:
export SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/filmorate export SPRING_DATASOURCE_USERNAME=filmorate export SPRING_DATASOURCE_PASSWORD=filmorate export ROOT_LOG_LEVEL=INFO
- Запустите приложение:
./gradlew bootRun
- Применить миграции вручную (опционально):
./gradlew flywayMigrate
- Базовый профиль —
dev(вsrc/main/resources/application.yml). - Дополнительные файлы конфигурации:
application-dev.yml— расширенное SQL-логирование и разрешениеflyway:clean.application-test.yml— профиль тестов на H2.logback-spring.xml— вывод логов в консоль и файл с ротацией.
- Настройки берутся из переменных окружения:
SPRING_DATASOURCE_URL,SPRING_DATASOURCE_USERNAME,SPRING_DATASOURCE_PASSWORD,LOG_FILE_PATH,ROOT_LOG_LEVEL.
Dockerfileиспользует двухэтапную сборку: Gradle билд → минимальный JRE-образ.docker-compose.ymlподнимает сервисыdb(PostgreSQL) иappс healthcheck и пробросом портов.- Логи приложения пишутся в
/var/log/filmorateвнутри контейнера и монтируются в volumeapp-logs.
- Консольные логи — для локальной отладки и кластеров.
- Файловые логи — ротация по 10 МБ, хранение до 7 дней (до 100 МБ суммарно).
- Уровень корневого логера регулируется
ROOT_LOG_LEVEL(INFOпо умолчанию).
- Интеграционные тесты используют H2 в режиме совместимости с PostgreSQL (
application-test.yml). - Запуск тестов:
./gradlew test
- Добавить линтеры (Checkstyle, Spotless) и сборку Docker-образа в CI.
- Для продакшена можно использовать Helm chart с теми же переменными окружения.