Сервис для управления пользовательскими депозитами с использованием Spring Boot, PostgreSQL и Elasticsearch. Это ветка с транзакциями для идемпотентности операций по переводам (не путайте с транзакциями БД).
- Java 21 и Maven 3.9.x (опционально)
- Docker + Docker Compose (Docker Desktop будет достаточно) | Kubernetes кластер
-
Создайте
.envфайл в корне проекта:DB_URL=jdbc:postgresql://host.docker.internal:5432/user_deposite_db DB_USER=ваш_postgres_юзер DB_PASSWORD=ваш_postgres_пароль ES_URIS=http://host.docker.internal:9200 ES_PASSWORD=ваш_elastic_пароль JWT_SECRET=ваш_jwt_секрет
-
Быстрый запуск всего сразу с
docker-compose(Docker-образ будет собран изDockerfile, если отсутствует):docker-compose up -d
-
Запуск в кластере Kubernetes:
-
Создайте кластер Kubernetes, установите
kubectlи подключитесь к кластеру. Это можно сделать за 1 шаг, если у вас установленDocker Desktopпросто активируйте KubernetesKubeadmв настройках. -
Создайте Docker-образ любым из указанных ниже способов:
mvn clean package -DskipTests -Pdocker-image
docker build -t user-deposit-service:0.0.1-SNAPSHOT . -
Создайте файл в папке проекта
k8s/user-deposit-secrets.yaml:apiVersion: v1 kind: Secret metadata: name: user-deposit-secrets type: Opaque stringData: DB_USER: "ваш_postgres_юзер" DB_PASSWORD: "ваш_postgres_пароль" ES_PASSWORD: "ваш_elastic_пароль" JWT_SECRET: "ваш_jwt_секрет"
-
Если у вас не очень мощный процессор отрегулируйте настройки в
k8s/user-deposit-app-deployment.yaml:resources: requests: cpu: 100m limits: cpu: 500m metrics: - type: Resource resource: name: cpu target: type: AverageValue averageValue: 10m
-
Находясь в корне проекта выполните команду:
kubectl apply -f ./k8s/
-
-
Для запуска приложения без
Dockerfile:Создайте файл
src/main/resources/secret/secret.properties.JWT_SECRET- необязательный дополнительный параметр, если не задать будет использоваться дефолтное значение, но это не безопасно. Можно также задать эти свойства как переменные окружения в конфигурации запуска IDEA.DB_URL=jdbc:postgresql://localhost:5432/user_deposite_db DB_USER=ваш_postgres_юзер DB_PASSWORD=ваш_postgres_пароль ES_URIS=http://localhost:9200 ES_PASSWORD=ваш_elastic_пароль JWT_SECRET=ваш_jwt_секрет
Можете сами создать PostreSQL и Elasticsearch БД или использовать
docker-compose-no-jar up -d
запустит только БД PostreSQL и Elasticsearch в Docker.
-
Сборка и запуск приложения без контейнера (используйте флаг
-Pdocker-imageесли хотите собирать Docker-образ с помощью Maven):- сборка и запуск тестов
mvn clean package
- быстрая сборка с пропуском тестов
mvn clean package -DskipTests
- запуск контейнера
docker run --env-file .env --name user_deposit_app --restart unless-stopped -p 8080:8080 -d user-deposit-service:0.0.1-SNAPSHOT
- запуск jar-файла приложения без контейнера
java -jar target/user-deposit-service-0.0.1-SNAPSHOT.jar
- сборка и запуск тестов
-
Сборка и запуск приложения отдельно в контейнере с помощью Dockerfile без Java и Maven в системе:
- сборка docker-образа
docker build -t user-deposit-service:0.0.1-SNAPSHOT . - запуск контейнера
docker run --env-file .env --name user-deposit-app --restart unless-stopped -p 8080:8080 -d user-deposit-service:0.0.1-SNAPSHOT
- сборка docker-образа
- После запуска сервиса доступен Swagger UI по адресу:
http://localhost:8080/swagger-ui/index.html - Данные пользователей можно посмотреть в файле:
src/main/resources/sql/init_user_data.sql
Для блокировки планировщиков при запуске нескольких экземпляров приложения используется упрощённый вариант через advisory lock. Можно вместо него настроить Quartz Job Scheduler для небольшого количества одновременно запущенных экземпляров или Redis + Scheduled Lock для большого количества экземпляров. Готов реализовать, если требуется.