Class HealthController
{status, versao, flavor}
(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.
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
Constructors -
Method Summary
-
Constructor Details
-
HealthController
public HealthController()Construtor padrão.
-