Class HealthController

java.lang.Object
br.com.xadm.comum.web.HealthController

@Requires(property="endpoints.health.enabled", value="false") @Controller("/health") @Secured("isAnonymous()") public class HealthController extends Object
Health check de fallback com a versão em runtime — shape plano {status, versao} (norma X-Adm de versionamento e health).

Condicional (@Requires(property = "endpoints.health.enabled", value = "false")): só provê /health quando o app desliga o HealthEndpoint do micronaut-management. Como a lib traz micronaut-management transitivamente (VersaoInfo é InfoSource), por default o management serve o /health rico (DB-aware) e este controller fica dormente; quem quer o shape plano seta endpoints.health.enabled: false e este controller acorda — sem as duas rotas GET /health colidirem (Micronaut responde 400 quando colidem).

Por que property e não missingBeans: missingBeans = HealthEndpoint é decisão de build-time do grafo de beans — sob native-image (AOT) a definição do HealthEndpoint existe no classpath (management transitivo), então missingBeans=false e o controller nunca registrava, mesmo com endpoints.health.enabled=false; resultado: /health pelado sem versao no binário native (o management estava desligado em runtime, mas o flat não assumia). A condição por property resolve em runtime e sobrevive ao AOT.

Trade-off consciente do shape plano: é liveness (o app está no ar), não readiness — não agrega o estado do banco. A versão também está em /info via VersaoInfo.

  • Constructor Details

    • HealthController

      public HealthController()
      Construtor padrão.