Class HealthController
{status, versao, flavor, commit}
(norma X-Adm de versionamento e health).
flavor ("native" | "jvm", via VersaoInfo.flavorAtual()) é o
campo opcional do contrato: sem ele, dois deploys da MESMA versão — o binário native e o jar de
fallback na JVM — são indistinguíveis no /health. Como o controller é da lib, o campo é
herdado por todo app, não trabalho app a app. Os dois campos obrigatórios (status,
versao) não mudaram — acréscimo aditivo.
commit (SHA de SOURCE_COMMIT, via VersaoInfo.commitAtual()) é o
discriminador de deploy: com a versão só, dois deploys do mesmo número são indistinguíveis e
o smoke de produção não tem alvo de rollback. Env ausente ou vazia → o campo é omitido (não
se emite string vazia: o consumidor distingue "lib antiga, sem o campo" de "commit desconhecido").
O campo já é previsto como opcional útil na norma de versionamento — a lib preenche um campo
do contrato, não muda contrato.
Sem @Requires de propósito — nem missingBeans nem property sobrevivem ao
AOT. Histórico: @Requires(missingBeans = HealthEndpoint) é decisão de build-time (a
definição do HealthEndpoint existe no classpath via management transitivo →
missingBeans=false → nunca registrava sob native). A troca pra @Requires(property =
"endpoints.health.enabled", value = "false") também falhou sob native-image: o @Requires
de classe num @Controller é avaliado em build-time pelo AOT e a bean/rota é podada
— mesmo com a property false em runtime, /health vinha {status:UP} sem
versao no native (provado jar×native no e2e-central: o jar registrava o flat, o native não). Por isso
o controller é incondicional: a rota entra no grafo AOT sempre, idêntica jar↔native.
Contrato do consumidor: o app desliga o management (endpoints.health.enabled:
false e endpoints.info.enabled: false) — norma da casa. Sem isso, o /health rico do
management (default-on) e este flat colidem (Micronaut responde 400 em rota duplicada). A comum-web
assume esse contrato.
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 Summary
ConstructorsConstructorDescriptionConstrutor padrão — lê o commit deSOURCE_COMMITem runtime. -
Method Summary
-
Constructor Details
-
HealthController
public HealthController()Construtor padrão — lê o commit deSOURCE_COMMITem runtime.
-