Configuração de perfis — Micronaut¶
Status: Aprovado · Responsável: Gustavo Madruga · Atualizado em: 2026-09-15
O integrador distingue três situações práticas:
| Situação | Perfis ativos (típico) | YAML carregado |
|---|---|---|
Deploy padrão (Coolify, só application.yml) |
nenhum nome dev/test (lista vazia ou outros nomes legados) |
application.yml + ENV |
| Desenvolvimento local | dev |
application.yml + application-dev.yml |
| Testes JUnit | test |
application.yml + application-test.yml |
Nota: MICRONAUT_ENVIRONMENTS=prod não é necessário para produção. Se ainda existir em algum deploy legado, o comportamento continua “produção” desde que dev e test não estejam ativos.
Perfil de desenvolvimento (dev)¶
Características¶
- Conecta ao PostgreSQL do Docker (
localhost:5432/integrador_dev) - Permite limpar e recriar o banco do zero (
clean-schema: truenoapplication-dev.yml) - Bearer em
/apidesligado por omissão - Sentry não inicializa sem
SENTRY_DSN(em geral não configurado em local)
Como usar¶
Variável de ambiente
export MICRONAUT_ENVIRONMENTS=dev
./gradlew run
Argumento JVM
./gradlew run --args="-Dmicronaut.environments=dev"
IDE: VM options: -Dmicronaut.environments=dev
Limpar e recriar o banco¶
Em dev, o Flyway usa clean-schema: true: a cada arranque limpa o schema e reaplica migrações.
Importante: isso só ocorre com perfil dev. O application.yml de produção mantém clean-schema: false.
Produção (default do JAR)¶
O ficheiro application.yml define os defaults de produção (Flyway sem clean-schema, pool, etc.). Não existe application-prod.yml; dados por cliente vêm de variáveis de ambiente (Coolify).
Características¶
- BD e segredos via ENV (
DATASOURCES_DEFAULT_*,INTEGRADOR_API_TOKEN,CLIENTE,SENTRY_DSN, …) - Nunca limpa o banco automaticamente
- UI web (edição,
/debug): só liberada comdevoutest— em Coolify semdev, a interface é somente leitura para alterações mutáveis
Sentry em produção¶
Defina SENTRY_DSN no Coolify. O código não usa mais o perfil prod para decidir o Sentry; usa DSN válido + ausência de dev/test.
Lista completa de variáveis: application-config.md.
Verificar perfil ativo¶
Nos logs de arranque, o Micronaut mostra por exemplo:
Active environment(s): [dev]
ou, em deploy só com defaults:
Active environment(s): []
(ou outros nomes, desde que não seja dev/test para efeitos de UI/Sentry.)
Estrutura de ficheiros¶
src/main/resources/
├── application.yml # Produção (default do JAR) + placeholders ${ENV:...}
└── application-dev.yml # Apenas com MICRONAUT_ENVIRONMENTS=dev
Testes¶
# Linux/macOS
./gradlew coverage
# Windows
.\gradlew.bat coverage
Postgres de teste: os testes @MicronautTest rodam contra o singleton da xadm-comum-teste — um
postgres:18-alpine por JVM, subido pelo Testcontainers, com as migrations reais aplicadas pelo Flyway na
primeira classe. Basta o Docker no ar; sem ele, cada classe @MicronautTest falha com uma
IllegalStateException que diz que o Postgres de teste não subiu. Não é preciso instalar Postgres nem
apontar URL.
- A classe de teste estende
IntegracaoComPostgres, que injeta a URL do datasource e zera as tabelas antes de cada teste, menos o histórico do Flyway (flyway_schema_history, o nome default, como em produção). O teste semeia o que precisa no@BeforeEach, que roda depois da limpeza. - Classe que injeta propriedades próprias sobrescreve
getProperties()somando as suas aosuper.getProperties(). - O
application-test.ymlfixa o pool de teste (connection-timeout: 5000,maximum-pool-size: 4) e não declara URL. Os tetos de tempo da suíte estão em Diagnóstico de testes flaky. - Os testes de migration que aplicam o Flyway do zero (
*FlywayIntegrationTest,UpdatedAt*SchemaTest) e oTableExportServiceIntegrationTestsobem container próprio, fora do singleton.
Testes sem base (ex.: Mockito puros) podem correr isoladamente com --tests 'br.com.xadm.comum.AuthSupportTest'.
Dicas¶
- Desenvolvimento: use o perfil
devpara desenvolvimento local. - Produção: configure as variáveis de ambiente no Coolify;
SENTRY_DSNse quiser erros no Sentry. - Secrets: use secrets do Coolify ou um gestor dedicado.
- Migrações: teste sempre em staging antes de produção.