Task Management System, a robust Java Spring Boot application designed to streamline task creation, assignment, and tracking. This README provides essential technical information about the project, explaining its architecture, design decisions, and how to get started.
The project embraces a Microservices Architecture, promoting modularity, scalability, and resilience. Each aspect of task management, from creation to assignment, is encapsulated within independent, loosely coupled microservices.
The project follows a modular structure to enhance maintainability and scalability:
src/main/java
: Java source code.src/test/java
: Unitary and integration tests for controller and services.src/main/resources
: Configuration files.docker-compose.yml
: Docker Compose configuration.
- Java Spring Boot: A powerful and flexible framework for building Java-based enterprise applications.
- Docker: Containerization for easy deployment and scalability.
- RabbitMQ: Asynchronous messaging for efficient task assignment.
- PostgreSQL Database: Utilizes a relational database for storing task information.
- Asynchronous Processing with @Async from Spring Boot: Implements parallelism for efficient task processing.
- NGINX: Efficiently handles load balancing and acts as a reverse proxy for the microservices.
To run the Task Management System locally, follow these steps:
Dockerize the application for simplified deployment:
- Build the jar file:
mvn clean install
- Build the Docker image:
docker build -t task-management-system .
- Run the docker containers:
docker compose up
- Access the application at http://localhost:8080
- Put PostgreSQL and RabbitMQ containers up:
docker compose up postgres rabbitmq
- Run the Spring Boot application:
./mvnw spring-boot:run
- Access the application at http://localhost:8080
RabbitMQ is integrated into the system to handle asynchronous communication. Task assignment events are processed efficiently, ensuring responsiveness.
Task processing is optimized through parallel mechanisms. Utilizing Spring's @Async
to parallelize task processing, enhancing system performance.
The project adheres to SOLID principles, applying design patterns such as Factory, Repository, and Observer where necessary. DTOs facilitate clean separation of concerns for API communication.
This project is licensed under the MIT License. Feel free to use, modify, and distribute the code as per the terms of the license.
Happy coding! 🚀