Skip to content

Commit 2aeaf97

Browse files
committed
Add lesson12: migration to Spring Boot
1 parent 0714771 commit 2aeaf97

1 file changed

Lines changed: 51 additions & 0 deletions

File tree

doc/lesson12.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# Стажировка <a href="https://github.com/JavaWebinar/topjava">Topjava</a>
2+
3+
## Открытые курсы:
4+
- [Spring Boot 3.x + HATEOAS](https://javaops.ru/view/bootjava)
5+
- [Spring Boot 4, Spring 7.0, JDK 25](https://javaops.ru/view/bootjava4)
6+
7+
## [Патчи занятия](https://drive.google.com/drive/u/1/folders/1sizknxR29Yu7XXjaVIBdS88ffXiVuqiB)
8+
9+
## Миграция на Spring Boot
10+
За основу кода взят **[финальный код BootJava, ветка patched](https://github.com/JavaOPs/bootjava/tree/patched/src/main/java/ru/javaops/bootjava)**
11+
Вычекайте в отдельную папку (как отдельный проект) ветку `spring_boot` нашего проекта (так удобнее, не придется постоянно переключаться между ветками):
12+
```
13+
git clone --branch spring_boot --single-branch https://github.com/JavaWebinar/topjava.git topjava_boot
14+
```
15+
Если будете его менять, [настройте `git remote`](https://javaops.ru/view/bootjava/lesson01#project)
16+
> Если захотите сами накатить патчи, сделайте ветку `spring_boot` от первого `init` и в корне **создайте каталог `src\test`**
17+
18+
----
19+
20+
#### Apply 12_1_init_boot_java
21+
- Для средних и больших проектов более удобна [организация пакетов по функционалу](https://stackoverflow.com/questions/6260302/548473): сначала крупными мазками функционал, внутри него слои.
22+
Финальный код Spring Boot 3.x (BootJava) разбил по функционалу на `app`, `common` и `user`.
23+
Процесс творческий, на одном из проектов я попробовал использовать [Spring Modulith](https://spring.io/projects/spring-modulith) и отказался от него, так как очень часто сущности делятся между разным функционалом и строгих границ не провести. "Суббота для человека, а не человек для субботы" в программировании звучит как: "Здравый смысл впереди строгой идеологии и архитектуры".
24+
Именно поэтому еда, принадлежащая юзеру, попала в пакет `user`. Если будете соблюдать такую структуру в своем выпускном проекте - НЕ МЕЛЬЧИТЕ!
25+
- Для получения авторизованного пользователя из `AuthUser` выделил отдельный `AuthUtil` класс.
26+
27+
28+
#### Apply 12_2_migrate_spring_boot_4
29+
- Миграция на Spring Boot 4 в соответствии с [первым занятием Spring Boot 4](https://javaops.ru/view/bootjava4/lesson01)
30+
- [Дополнительный функционал](https://javaops.ru/view/bootjava4/lesson02) - кэширование при авторизации,
31+
API Versioning и Maven 4 - совершенно опционален в вашем выпускном, делать по желанию.
32+
33+
34+
#### Apply 12_3_add_calories_meals
35+
36+
Добавил из TopJava:
37+
- Еду, калории
38+
- Таблицы назвал в единственном числе: `user_role, meal` (кроме `users`, _user_ зарезервированное слово)
39+
- Общие вещи (пусть небольшие) вынес в сервис : `MealService`
40+
- Проверку принадлежности еды делаю в `MealRepository.getBelonged`
41+
- Вместо своих конверторов использую `@DateTimeFormat`
42+
- Обратите внимание на `UserRepository.getWithMeals` - он [не работает с `@EntityGraph`. Зато работает с обычным `JOIN FETCH`](https://stackoverflow.com/a/46013654/548473) и `DISTINCT` больше не нужен:
43+
- [forget about DISTINCT](https://vladmihalcea.com/spring-6-migration/#Auto-deduplication)
44+
- [it is no longer necessary to use distinct in JPQL and HQL](https://docs.jboss.org/hibernate/orm/6.0/migration-guide/migration-guide.html#query-sqm-distinct)
45+
- Мигрировал все тесты контроллеров. В выпускном проекте столько тестов необязательно! Достаточно нескольких, на основные юзкейсы.
46+
- Кэширование в выпускном очень желательно. 7 раз подумайте, что будете кэшировать!
47+
- **Максимально просто, самые частые запросы, которые редко изменяются**.
48+
- **Добавьте в свой выпускной OpenApi/Swagger - это будет большим плюсом и избавит от необходимости писать документацию**.
49+
50+
### За основу выпускного предлагаю взять этот код миграции, сделав свой выпускной МАКСИМАЛЬНО в этом стиле.
51+
### Успехов с выпускным проектом и в карьере!

0 commit comments

Comments
 (0)