Веб-приложение на Spring Boot загружает случайные данные из публичного API RandomDataTools, сохраняет их в базу данных H2 и предоставляет веб‑интерфейс для просмотра, пагинации, а также отдельные страницы для конкретного или случайного человека.
- Загрузка произвольного количества людей из API (пакетами по 100, с задержкой 500 мс)
- Хранение всех данных в реляционной БД
- Главная страница со списком людей (пагинация, ссылки на карточку)
- Форма для загрузки дополнительных записей
- Страница конкретного человека:
/{id} - Страница случайного человека:
/random(обновляется при каждом запросе) - Обработка ошибок (404, 400, 500) с кастомными страницами
- Юнит-тесты с моками внешнего API
- Запуск в Docker через
docker-compose
| Технология | Зачем |
|---|---|
| Spring Boot 3.4 | Быстрая разработка, встроенный контейнер сервлетов, удобное тестирование |
| Thymeleaf | Интеграция со Spring MVC, естественные HTML-шаблоны |
| H2 (in‑memory) | Демо-БД без установки, поддержка SQL, автономность |
| Spring JDBC | Лёгкий доступ к БД, полный контроль над SQL, без ORM |
| RestTemplate | Синхронный HTTP-клиент, легко мокается в тестах |
| Gradle | Гибкая сборка, многостадийный Dockerfile |
| JUnit + Mockito | Встроенный мокинг внешних вызовов |
| Docker + compose | Портативность, единая команда запуска |
Требования: Java 21, Gradle (или ./gradlew)
git clone <your-repo-url>
cd yadro-app
./gradlew clean bootJar
java -jar build/libs/yadro-0.0.1-SNAPSHOT.jarПосле запуска откройте http://localhost:8080
При первом старте автоматически загружается 1000 человек (класс DataLoader).
Убедитесь, что установлены Docker и Docker Compose.
docker-compose up --buildИли вручную:
docker build -t yadro-app .
docker run -p 8080:8080 yadro-appПриложение будет доступно на http://localhost:8080.
| Страница | Действие |
|---|---|
/ или /homepage |
Таблица со списком людей, пагинация, кнопка «Загрузить ещё», ссылка на случайного человека |
/load (POST) |
Загружает указанное количество новых людей (параметр count) |
/{id} |
Карточка человека с полной информацией (включая полный адрес) |
/random |
Случайный человек – при обновлении страницы данные меняются |
/count |
Возвращает общее количество записей в базе (текст/plain) |
Запуск всех тестов:
./gradlew testТесты (YadroApplicationTests) покрывают:
- Загрузку и сохранение (мок
RestTemplate) - Пагинацию
- Поиск по ID
- Получение случайного человека
- Проверку
isEmpty()
src/main/java/com/yadro/yadro/app/
├── config/MainConfig.java # Настройка RestTemplate
├── controller/MainController.java # Обработка веб-запросов
├── exception/... # Кастомные исключения + глобальный хендлер
├── model/Person.java # DTO, подготовка поля address
├── repository/MainRepository.java # JdbcTemplate, SQL-запросы
├── service/MainService.java # Логика загрузки из API, пагинация
├── service/DataLoader.java # Загрузка 1000 записей при старте
└── YadroApplication.java
src/main/resources/
├── static/css/style.css # Стили
├── templates/
│ ├── index.html # Главная страница с таблицей
│ ├── person.html # Карточка человека
│ └── error.html # Страница ошибок
├── application.properties # Настройки БД, Thymeleaf
└── schema.sql # Создание таблицы persons
Dockerfile # Многостадийная сборка
compose.yaml # Описание сервиса для Docker Compose
build.gradle # Зависимости и плагины