Стандартный шаблон проекта на SpringBoot
- Spring Boot – как основной фрэймворк
- PostgreSQL – как основная реляционная база данных
- Redis – как кэш и очередь сообщений через pub/sub
- testcontainers – для изолированного тестирования с базой данных
- Liquibase – для ведения миграций схемы БД
- Gradle – как система сборки приложения
- Lombok – для удобной работы с POJO классами
- MapStruct – для удобного маппинга между POJO классами
- База поднимается в отдельном сервисе infra
- Redis поднимается в единственном инстансе тоже в infra
- Liquibase сам накатывает нужные миграции на голый PostgreSql при старте приложения
- В тестах используется testcontainers, в котором тоже запускается отдельный инстанс postgres
- В коде продемонстрирована работа как с JdbcTemplate, так и с JPA (Hibernate)
- Сначала нужно склонировать этот репозиторий
git clone https://github.com/FAANG-School/ServiceTemplate
- Далее удаляем служебную директорию для git
# Переходим в корневую директорию проекта
cd ServiceTemplate
rm -rf .git
-
Далее нужно создать совершенно пустой репозиторий в github/gitlab
-
Создаём новый репозиторий локально и коммитим изменения
git init
git remote add origin <link_to_repo>
git add .
git commit -m "<msg>"
Готово, можно начинать работу!
Сначала нужно развернуть базу данных из директории infra
Далее собрать gradle проект
# Нужно запустить из корневой директории, где лежит build.gradle.kts
gradle build
Запустить jar'ник
java -jar build/libs/ServiceTemplate-1.0.jar
Но легче всё это делать через IDE
RESTful приложения калькулятор с единственным endpoint'ом, который принимает 2 числа и выдает результаты их сложения, вычитаяни, умножения и деления
- Обычная трёхслойная архитектура – Controller, Service, Repository
- Слой Repository реализован и на jdbcTemplate, и на JPA (Hibernate)
- Написан GlobalExceptionHandler
который умеет возвращать ошибки в формате
{"code":"CODE", "message": "message"}
- Используется TTL кэширование вычислений в CalculationTtlCacheService
- Реализован простой Messaging через Redis pub/sub
- Конфигурация – сетапится RedisTemplate – класс, для удобной работы с Redis силами Spring
- Отправитель – генерит рандомные запросы и отправляет в очередь
- Получатель – получает запросы и отправляет задачи асинхронно выполняться в воркер
Написаны только для единственного REST endpoint'а
- SpringBootTest
- MockMvc
- Testcontainers
- AssertJ
- JUnit5
- Parameterized tests
- Dockerfile, который подключается к сети запущенной postgres в docker-compose
- Redis connectivity
- ...