Spec Backend Com Java E Springboot • Trilha Progressiva em 4 Níveis


🎯 Nível 1: Fundamentos

Problema 19.1 — Habilitação e Exposição de Endpoints do Spring Boot Actuator

Contexto: Habilitação e Exposição de Endpoints do Spring Boot Actuator no contexto de Observabilidade com Actuator, Micrometer e Prometheus.

Requisitos de Execução:

  1. Configurar management.endpoints.web.exposure.include=health,info,metrics,prometheus no application.yml.

Resultado Esperado

GET /actuator/health -> {'status': 'UP'} com detalhes de banco e disco.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_19_1_SeuNome
  2. Envie na tarefa: Atividade Cap 19 - Observabilidade com Actuator, Micrometer e Prometheus
🔑 Gabarito de Código & Solução Comentada
# application.yml
management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics,prometheus
  endpoint:
    health:
      show-details: always

🔍 Nível 2: Prática

Problema 19.2 — Métricas Customizadas com Micrometer (Counter e Timer)

Contexto: Métricas Customizadas com Micrometer (Counter e Timer) no contexto de Observabilidade com Actuator, Micrometer e Prometheus.

Requisitos de Execução:

  1. Injetar MeterRegistry e registrar contador de pedidos finalizados com tags de categoria.

Resultado Esperado

Métrica 'pedidos_criados_total' registrada no Prometheus.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_19_2_SeuNome
  2. Envie na tarefa: Atividade Cap 19 - Observabilidade com Actuator, Micrometer e Prometheus
🔑 Gabarito de Código & Solução Comentada
// MetricService.java
package com.empresa.api.metrics;

import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.stereotype.Service;

@Service
public class MetricService {
    private final Counter pedidosCounter;

    public MetricService(MeterRegistry registry) {
        this.pedidosCounter = Counter.builder("pedidos_criados_total")
            .description("Total de pedidos processados com sucesso")
            .tag("ambiente", "producao")
            .register(registry);
    }

    public void registrarNovoPedido() {
        pedidosCounter.increment();
    }
}

⚡ Nível 3: Integração

Problema 19.3 — HealthIndicator Customizado para Serviços Críticos

Contexto: HealthIndicator Customizado para Serviços Críticos no contexto de Observabilidade com Actuator, Micrometer e Prometheus.

Requisitos de Execução:

  1. Implementar classe implementando HealthIndicator verificando conectividade com gateway de pagamento.

Resultado Esperado

HealthIndicator reporta UP ou DOWN no endpoint /actuator/health.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_19_3_SeuNome
  2. Envie na tarefa: Atividade Cap 19 - Observabilidade com Actuator, Micrometer e Prometheus
🔑 Gabarito de Código & Solução Comentada
// CustomHealthIndicator.java
package com.empresa.api.metrics;

import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;

@Component
public class GatewayPagamentoHealthIndicator implements HealthIndicator {
    @Override
    public Health health() {
        boolean gatewayOnline = true;
        if (gatewayOnline) {
            return Health.up().withDetail("gateway", "Disponível").build();
        }
        return Health.down().withDetail("gateway", "Indisponível").build();
    }
}

🏆 Nível 4: Desafio Corporativo

Problema 19.4 — Tracing Distribuído com Micrometer Tracing e Zipkin/Tempo

Contexto: Tracing Distribuído com Micrometer Tracing e Zipkin/Tempo no contexto de Observabilidade com Actuator, Micrometer e Prometheus.

Requisitos de Execução:

  1. Configurar propagação de TraceId e SpanId em logs com MDC do SLF4J.

Resultado Esperado

Logs emitidos com padrão [api-pagamentos,traceId=abc123,spanId=def456].

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_19_4_SeuNome
  2. Envie na tarefa: Atividade Cap 19 - Observabilidade com Actuator, Micrometer e Prometheus
🔑 Gabarito de Código & Solução Comentada
// TracingLogger.java
package com.empresa.api.metrics;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

@Component
public class TracingLogger {
    private static final Logger log = LoggerFactory.getLogger(TracingLogger.class);

    public void logComTrace() {
        log.info("Operação rastreada de ponta a ponta.");
    }
}