This repository contains the source code for the Spring Boot Microservices Course.
We will build a BookStore application using Spring Boot, Spring Cloud, and Docker.
-
catalog-service: This services provides REST API for managing catalog of products(books).
TechStack: Spring Boot, Spring Data JPA, PostgreSQL
-
order-service: This service provides the REST API for managing orders and publishes order events to the message broker.
TechStack: Spring Boot, Spring Security OAuth2, Keycloak, Spring Data JPA, PostgreSQL, RabbitMQ
-
notification-service: This service listens to the order events and sends notifications to the users.
TechStack: Spring Boot, RabbitMQ
-
api-gateway: This service is an API Gateway to the internal backend services (catalog-service, order-service).
TechStack: Spring Boot, Spring Cloud Gateway
-
bookstore-webapp: This is the customer facing web application where customers can browse the catalog, place orders, and view their order details.
TechStack: Spring Boot, Spring Security OAuth2, Keycloak, Thymeleaf, Alpine.js, Bootstrap
- Building Spring Boot REST APIs
- Database Persistence using Spring Data JPA, Postgres, Flyway
- Event Driven Async Communication using RabbitMQ
- Implementing OAuth2-based Security using Spring Security and Keycloak
- Implementing API Gateway using Spring Cloud Gateway
- Implementing Resiliency using Resilience4j
- Job Scheduling with ShedLock-based distributed Locking
- Using RestClient, Declarative HTTP Interfaces to invoke other APIs
- Creating Aggregated Swagger Documentation at API Gateway
- Local Development Setup using Docker, Docker Compose and Testcontainers
- Testing using JUnit 5, RestAssured, Testcontainers, Awaitility, WireMock
- Building Web Application using Thymeleaf, Alpine.js, Bootstrap
- Monitoring & Observability using Grafana, Prometheus, Loki, Tempo
- Install Java 21. Recommend using SDKMAN for managing Java versions.
- Install Docker Desktop
- Install IntelliJ IDEA or any of your favorite IDE
- Install Taskfile utility
- Install Postman or any REST Client
$ curl -s "https://get.sdkman.io" | bash
$ source "$HOME/.sdkman/bin/sdkman-init.sh"
$ sdk install java 24.0.1-tem
$ sdk install maven
$ brew install go-task
(or)
$ go install github.com/go-task/task/v3/cmd/task@latest
Verify the prerequisites
$ java -version
$ docker info
$ docker compose version
$ task --version
# Clone the repository:
$ git clone https://github.com/sivaprasadreddy/spring-boot-microservices-course.git
$ cd spring-boot-microservices-course
-
Start all the required services such as PostgreSQL, RabbitMQ, Keycloak, etc.:
$ task start_infra
-
Start individual microservices: You can start individual microservices by running their respective main entrypoint classes from IDE:
ApiGatewayApplication
,CatalogServiceApplication
,OrderServiceApplication
,NotificationServiceApplication
,BookstoreWebappApplication
-
Access the application at http://localhost:8080
- Catalog Service PostgreSQL DB:
jdbc:postgresql://localhost:15432/postgres
with credentialspostgres/postgres
- Order Service PostgreSQL DB:
jdbc:postgresql://localhost:25433/postgres
with credentialspostgres/postgres
- RabbitMQ:
http://localhost:15672
with credentialsguest/guest
- Keycloak:
http://localhost:9191
with credentialsadmin/admin1234
- MailHog:
http://localhost:8025
Each microservice has Testcontainers based configuration to start the required services such as PostgreSQL, RabbitMQ, Keycloak, etc automatically.
You can start individual microservices by running their respective Test main entrypoint classes from IDE: TestCatalogServiceApplication
, TestOrderServiceApplication
, TestNotificationServiceApplication
, ApiGatewayApplication
, BookstoreWebappApplication
.
-
Start all:
$ task start
-
Access the application at http://localhost:8080
- Start Grafana, Tempo, Loki, Prometheus using
$ task start_monitoring
- Set
MANAGEMENT_TRACING_ENABLED=true
indeployment/docker-compose/.env
file - Restart the application using
$ task restart
Now you can access the observability stack using the following URLs:
- Access Grafana at http://localhost:3000
- Access Prometheus at http://localhost:9090