Домашнее задание по теме "Инструменты разработчика" для дисциплины "Язык Java"
Spring Boot приложение для демонстрации работы с:
- Gradle сборкой
- IntelliJ IDEA Debugger
- Профилировщиком (Java Flight Recorder / IntelliJ IDEA Profiler)
- Java 17+
- Gradle 8.5+ или IntelliJ IDEA
- Откройте проект в IntelliJ IDEA
- IDEA автоматически распознает проект как Gradle и предложит импортировать его
- Дождитесь завершения индексации и загрузки зависимостей
- После этого все ошибки компиляции должны исчезнуть
Если Gradle не установлен, скачайте его с официального сайта и установите.
После установки выполните:
gradle wrapperЭто создаст полноценный Gradle Wrapper для проекта.
- Откройте
MessagingApplication.java - Нажмите на зеленую стрелку запуска
./gradlew bootRunПосле запуска приложение доступно на http://localhost:8080:
GET /api/messages- получить все сообщенияGET /api/messages/nplus1- демонстрация проблемы N+1GET /api/messages/optimized- оптимизированный запросGET /api/messages/{id}- получить сообщение по IDGET /api/messages/{id}/fail- демонстрация LazyInitializationExceptionPOST /api/messages- создать новое сообщение
http://localhost:8080/h2-console
- JDBC URL:
jdbc:h2:mem:testdb - Username:
sa - Password: (пусто)
- ✅ Файл build.gradle настроен
- ✅ Кастомная задача
runTestDataInitializerсоздана - ✅ Зависимости Hibernate вынесены в переменные
- Установить breakpoint в
MessageService.getMessagesOptimized() - Использовать Step Into/Step Over для отслеживания выполнения
- Изучить проблему N+1 в
getMessagesNPlus1() - Проанализировать LazyInitializationException в эндпоинте
/api/messages/{id}/fail
- Запустить приложение с профилировщиком
- Сгенерировать нагрузку на
/api/messages/nplus1 - Сравнить с
/api/messages/optimized - Проанализировать Flame Graph
./gradlew testИли через IntelliJ IDEA: правый клик на MessagingApplicationTests.java → Run Tests
Результаты тестирования:
- HTML отчет:
build/reports/tests/test/index.html - Сохраненные результаты профилирования:
src/main/resources/Test results - Test Summary_files
src/
├── main/
│ ├── java/com/example/messaging/
│ │ ├── MessagingApplication.java
│ │ ├── controller/MessageController.java
│ │ ├── service/MessageService.java
│ │ ├── repository/
│ │ │ ├── MessageRepository.java
│ │ │ └── AuthorRepository.java
│ │ └── model/
│ │ ├── Message.java
│ │ └── Author.java
│ └── resources/application.properties
└── test/
└── java/com/example/messaging/
└── MessagingApplicationTests.java