Today I switched from payments to the challenge every board asks for: trustworthy dashboards.
I built a Reporting Service that turns raw events into executive-level metrics.
📊 What went live
- Daily snapshots using Spring Batch + SQL
ON CONFLICT→ no more recomputing six months of data. - Insight APIs powered by JPA projections + Redis cache → dashboards respond in milliseconds.
- Self-service exports (PDF/CSV) via Thymeleaf templates + OpenPDF, with S3 upload and email delivery.
- RBAC/OAuth2 → finance sees everything; leadership only what’s relevant.
- Observability: metrics (
reporting.batch.duration,reporting.export.count) feeding Grafana and Kibana.
💡 Why it matters
- Provides full traceability — no hidden spreadsheets.
- Frees squads from daily “can you pull this report for me?” requests.
- Keeps OLTP healthy: aggregations and exports run in isolation.
📚 Full deep dive (+ code)
- Blog version: https://enouveau.io/blog/2025/11/10/reporting-service-under-the-hood.html
- Repo: adelmonsouza/30DiasJava-Day10-ReportingService
- Projeto pessoal: Este é um projeto do desafio #30DiasJava, mantido independentemente para fins educacionais.
Next episode → Day 11/30 — Logging Service in Spring Boot