15 de agosto de 2026 • Java

08 - Spring Profiles

O que é Profiling?

Spring Profiles é um recurso que permite definir diferentes configurações para diferentes ambientes (ou casos de uso) sem alterar o código da sua aplicação.

Em vez de modificar arquivos de configuração toda vez que você implanta sua aplicação, você pode criar configurações específicas do ambiente e ativar o profile apropriado.

Ambientes comuns incluem:

  • Desenvolvimento (dev)
  • Teste (test)
  • Homologação (staging)
  • Produção (prod)
  • Local (local)

Cada profile pode ter seus próprios:

  • Definições de Bean
  • Propriedades
  • Configuração de banco de dados
  • Serviços externos
  • Configurações de segurança
  • Configuração de log

Isso ajuda a manter a aplicação limpa, manutenível e independente do ambiente.


Por que usar Spring Profiles?

Sem profiles, desenvolvedores frequentemente precisam:

  • Comentar/descomentar código de configuração
  • Alterar URLs de banco de dados manualmente
  • Modificar endpoints de API antes da implantação
  • Correr o risco de implantar configurações de desenvolvimento em produção

Spring Profiles resolvem esses problemas carregando automaticamente a configuração correta com base no ambiente ativo.

Por exemplo:

AmbienteBanco de DadosLog
devPostgreSQL LocalDEBUG
testBanco de Dados de TesteINFO
prodBanco de Dados de ProduçãoWARN

Como usar?

1. Crie arquivos de configuração específicos do ambiente

application.properties
application-dev.properties
application-test.properties
application-prod.properties

Exemplo:

application-dev.properties

server.port=8080

spring.datasource.url=jdbc:postgresql://localhost/devdb

logging.level.root=DEBUG

application-prod.properties

server.port=8080

spring.datasource.url=jdbc:postgresql://prod-server/proddb

logging.level.root=WARN

2. Ative um profile

Usando application.properties

spring.profiles.active=dev

Usando variáveis de ambiente

SPRING_PROFILES_ACTIVE=prod

Usando linha de comando

java -jar app.jar --spring.profiles.active=prod

ou

mvn spring-boot:run -Dspring-boot.run.profiles=dev

3. Spring carrega a configuração correspondente

Se o profile ativo for:

dev

Spring carrega:

application.properties
+
application-dev.properties

Propriedades no arquivo específico do profile sobrescrevem as padrão.


Anotação @Profile

A anotação @Profile permite que um Spring Bean seja criado apenas quando um profile específico está ativo.

Exemplo

@Service
@Profile("dev")
public class MockEmailService implements EmailService {

    @Override
    public void send() {
        System.out.println("Sending fake email...");
    }
}

Este bean existe apenas quando o profile dev está ativo.


Outra implementação:

@Service
@Profile("prod")
public class SmtpEmailService implements EmailService {

    @Override
    public void send() {
        System.out.println("Sending real email...");
    }
}

Ao executar com:

spring.profiles.active=prod

Spring cria:

SmtpEmailService

Ao executar com:

spring.profiles.active=dev

Spring cria:

MockEmailService

Nenhuma alteração de código é necessária.


Múltiplos Profiles

Um bean pode pertencer a múltiplos profiles.

@Service
@Profile({"dev", "test"})
public class MockNotificationService {
}

O bean será criado se dev ou test estiver ativo.


Negando um Profile

Você pode ativar um bean quando um profile não está ativo.

@Service
@Profile("!prod")
public class ConsoleLogger {
}

Este bean é criado para todos os profiles, exceto prod.


Expressões de Profile

Spring também suporta expressões de profile.

@Profile("dev & cloud")

O bean é criado somente se ambos os profiles estiverem ativos.

@Profile("dev | test")

O bean é criado se qualquer um dos profiles estiver ativo.

@Profile("prod & !cloud")

O bean é criado somente quando executando em prod mas não no profile cloud.


Casos de Uso Típicos

Spring Profiles são comumente usados para:

  • Alternar entre bancos de dados de desenvolvimento e produção
  • Usar implementações mock durante o desenvolvimento
  • Habilitar beans apenas para teste
  • Configurar diferentes configurações de segurança
  • Conectar a diferentes serviços de terceiros
  • Habilitar ou desabilitar tarefas agendadas
  • Alterar níveis de log
  • Configuração de features específicas do ambiente

Vantagens

  • Separação limpa das configurações de ambiente
  • Sem modificações de código entre as implantações
  • Fácil gerenciamento de ambiente
  • Simplifica os testes
  • Suporta diferentes configurações de infraestrutura
  • Funciona perfeitamente com Spring Boot
  • Fácil integração com Docker, Kubernetes e pipelines de CI/CD

Desvantagens

  • Perfis demais podem se tornar difíceis de gerenciar
  • Profile ativo incorreto pode causar comportamento inesperado
  • Não se destina a feature toggles (use feature flags ou @ConditionalOnProperty em vez disso)
  • Configurações específicas de profile podem se tornar duplicadas se não forem organizadas cuidadosamente

Melhores Práticas

  • Mantenha um application.properties padrão para configurações comuns.
  • Use profiles apenas para comportamento específico do ambiente.
  • Prefira nomes de profile significativos (dev, test, staging, prod).
  • Evite incorporar lógica de negócios em beans específicos de profile.
  • Para habilitar/desabilitar features individuais, prefira @ConditionalOnProperty em vez de criar muitos profiles.

Resumo

Spring Profiles oferece uma maneira limpa de separar as configurações da aplicação para diferentes ambientes. Ao ativar um profile específico, Spring carrega as propriedades apropriadas e cria apenas os beans associados a esse profile através da anotação @Profile. Isso torna as aplicações mais fáceis de configurar, implantar e manter em ambientes de desenvolvimento, teste, homologação e produção.

← Voltar para o blog