IoT device management system built with Spring Boot 3.5.7 and reactive programming (Spring WebFlux).
- Framework: Spring Boot 3.5.7 (Java 25)
- Reactive Stack: Spring WebFlux, Project Reactor, R2DBC
- Database: PostgreSQL 17.2 (accessed via R2DBC)
- Resilience: Resilience4j (Circuit Breaker, Retry, Timeout)
- Observability: Prometheus, Grafana, Spring Boot Actuator
- Testing: JUnit 5.12.2, Testcontainers, K6
- For Development: Java 25, Maven 3.9+, Docker & Docker Compose
- For Testing Only: Java 25, Maven 3.9+ (Testcontainers provides PostgreSQL automatically)
# Start application with PostgreSQL
make start
# Start application with observability stack (Prometheus + Grafana)
make start-obs
# Stop application
make stop# Run all tests (uses Testcontainers, no Docker Compose needed)
make test- Application: http://localhost:8080
- Swagger UI: http://localhost:8080/swagger-ui.html
- OpenAPI Spec: http://localhost:8080/v3/api-docs
- Health Check: http://localhost:8080/actuator/health
- Prometheus Metrics: http://localhost:8080/actuator/prometheus
- Grafana: http://localhost:3000 (admin/admin)
- Prometheus UI: http://localhost:9090
make start # Start application with PostgreSQL
make test # Run all tests (68 tests, uses Testcontainers)
make stop # Stop all services
make logs # Show application logsSee Development Guide for all available commands and development workflows.
- Development Guide - Complete development commands and workflows
- Architecture - Package structure and dependency rules
- Resilience - Circuit Breaker, Retry, and Timeout patterns
- Testing Guide - Test strategy and coverage
- K6 Performance Testing - Load testing with K6
- Observability - Monitoring and Grafana dashboards
- ✅ Reactive Programming: Non-blocking architecture
- ✅ Resilience Patterns: Circuit breakers, retries, timeouts
- ✅ Observability: Structured logging, metrics, dashboards
- ✅ API Documentation: Auto-generated Swagger UI
- ✅ Testing: 68 tests (Testcontainers, no Docker Compose needed)
- ✅ Performance Testing: K6 load, stress, and spike tests
Device States:
AVAILABLE- Device is available for useIN_USE- Device is currently being usedINACTIVE- Device is no longer active in the system
Domain Rules:
- Creation time cannot be updated
- Name and brand cannot be updated if device is IN_USE
- Devices in IN_USE or INACTIVE state cannot be deleted
- INACTIVE devices can be updated (to allow reactivation)
This project is licensed under the MIT License. See LICENSE for details.