Skip to content

arivan-amin/Clean-Microservices-Template

Repository files navigation

App-Name

Overview

This project is a template for an enterprise-level backend application with Microservices Architecture using Java.

It serves as a practice project to demonstrate the implementation of microservices using modern Java and Spring Boot and follow some of the best practices in development.


Notable Features

  • Automatic Audit Logs Recording: Uses Spring AOP to create Audit Events automatically whenever any API in any of the services are called and uses Kafka to send them to the Audit Service to be recorded, allowing the controllers to be clutter-free and simple.
  • Clean and concise Restful API in all services: the API follows the modern best practices in Restful services recommendations like using ResponseEntity and returning ProblemDetails.
  • CQRS: Command and Query Separation Principle to implement Business logic.
  • ArchUnit: to validate architectural boundaries and verify adherence to best coding standards
  • @RestControllerAdvice: to handle specific exceptions and return a unified and standard error response instead of an exception stack trace using Spring ProblemDetail.
  • OpenAPI and Swagger Docs: to provide detailed documentation for all endpoints.
  • Entity and DTO separation: decouples core business logic from presentation using request and response pojo.
  • Core Entity and Jpa separation: core entities have no association with JPA and are never annotated with @Entity.

Quick Info

Java SpringBoot Maven Build Status License

Last Commit Repo Size Contributors Platform

πŸ› οΈ Architecture concepts demonstrated and implemented

  • Microservices
  • Clean Architecture
  • Clean Code
  • Command-Query Responsibility Separation
  • Solid Principles
  • Loose Coupling of Components
  • Spring Dependency Injection
  • Aspect-Oriented Programming (AOP)

πŸ› οΈ Technical Features Implemented

  • Microservices Architecture.
  • Automatic Audit Logs recording: Uses Spring AOP to automatically store audit logs.
  • Robust Monitoring: Real-time monitoring with Grafana, Loki, and Tempo.
  • Event-Driven Communication: Using Kafka.
  • Centralized Logging & Tracing: Using Logback and Tempo.
  • Database Migrations: Using Liquibase.
  • Dockerized Deployment: Using Docker and Docker Compose.

Currently, the following services are implemented, other services will be added:

  • Discovery Server
  • API Gateway
  • Employee Service
  • Audit Service

Technologies used and their responsibility

  • Java 21
  • Spring Boot
  • Spring Cloud
  • Eureka: Dynamic service registry.
  • MySQL: Services data storage.
  • MongoDB: Storage for Audit logs.
  • Kafka: Event streaming for microservices.
  • Docker
  • Grafana, Loki, Tempo: Observability stack for metrics, logging, and tracing.
  • JUnit & Mockito: Unit testing and Mocking.
  • Swagger/OpenAPI: API documentation.
  • Liquibase: Database Migrations.
  • Lombok: Cleaner code with reduced boilerplate.

Grafana Monitoring Sample

image

πŸš€ Installation Guide

Prerequisites

  • Java 21
  • Maven
  • Docker & Docker Compose

Steps to Get Started

  1. Clone the Repository:

    git clone https://github.com/arivan-amin/Clean-Microservices-Template.git
    cd Clean-Microservices-Template
  2. Build Core Module:

    cd Core
    mvn clean install
    cd ..
  3. Build and Package the Project:

    mvn clean package
  4. Set Environment Variables (Linux/MacOS):

    export EUREKA_USER=admin
    export EUREKA_PASSWORD=admin
    *(For Windows, use `set` command)*
    
  5. Run Services with Docker Compose:

    docker compose up -d
  6. Access the Services:

  7. Grafana Dashboard Setup:

    • Import pre-built dashboard JSON configuration from docker/grafana/ folder.

πŸ§ͺ Testing

  • Run Unit and Integration Tests:
    mvn test

βš™οΈ Microservices Overview

  • Discovery Server: Dynamic service discovery and registry.
  • API Gateway: Centralized entry point for routing and security.
  • Core Module: Shared utilities and functionality.
  • Employee Service: Manages employee data.
  • Audit Service: Logs events and ensures compliance.

🀝 Contributing

We welcome contributions! Fork the repository, create a new branch, and submit a pull request.


πŸ“œ License

This project is licensed under the MIT License. See the LICENSE file for more details.


πŸ“§ Contact

For questions or inquiries: