Observante é uma aplicação Spring Boot avançada focada em observabilidade, métricas, tracing e concorrência. Ela demonstra o uso de Virtual Threads, diferentes mecanismos de locks, semáforos e fornece endpoints de saúde e métricas para monitoramento de performance e estado do sistema.
A aplicação demonstra diferentes estratégias de sincronização e concorrência:
- ReentrantLock – Lock reentrante com timeout e métricas de aquisição.
- ReadWriteLock – Leitura/escrita concorrente com lock compartilhado e exclusivo.
- StampedLock – Suporte a leitura otimista e pessimista.
- Semaphore – Controle de acesso a recursos limitados.
- Synchronized (demonstrativo) – Mostra risco de pinning em Virtual Threads.
- Configuração do Spring Boot e Tomcat para usar Virtual Threads.
- Executors assíncronos usando Virtual Threads (
@Async) para operações de I/O. - Executors tradicionais de Platform Threads para comparação de performance.
A aplicação utiliza Micrometer e Spring Boot Actuator para expor métricas e tracing:
- Métricas personalizadas:
- Contador de threads virtuais criadas
- Contador de platform threads
- Timer de requisições HTTP
- Timer de aquisição de locks
- Contador de erros
- Exportação para Prometheus.
- Tracing configurado para OpenTelemetry e Zipkin.
A aplicação fornece endpoints de saúde detalhados via Actuator:
- VirtualThreads – monitoramento de operação, erro, timeout e uso de memória.
- ThreadPool – informações sobre threads ativas, deadlocks e contagem de threads.
- Performance – latência de operações, tempo de garbage collection e carga do sistema.
Principais configurações aplicadas via application.properties:
spring.threads.virtual.enabled=true→ habilita Virtual Threads- Exposição completa dos endpoints do Actuator (
management.endpoints.web.exposure.include=*) - Configurações de metrics, tracing e logging detalhadas
- Java 21
- Spring Boot 3.5
- Spring Boot Actuator
- Micrometer (Prometheus e Tracing)
- OpenTelemetry e Zipkin
- Lombok
- Maven
/actuator/health→ status detalhado do sistema/actuator/metrics→ métricas gerais/actuator/prometheus→ métricas para Prometheus
/concurrency/reentrant→ operação com ReentrantLock/concurrency/read→ leitura com ReadWriteLock/concurrency/write→ escrita com ReadWriteLock/concurrency/optimistic→ leitura otimista com StampedLock/concurrency/semaphore→ uso de Semaphore/concurrency/synchronized→ demonstração de pinning
# Build da aplicação
mvn clean install
# Executar aplicação
mvn spring-boot:run