MÓDULO 7 - Bancos de Dados e Transações
Bem-vindo ao Módulo 7! 🗄️
Agora você já sabe usar o Spring Data JPA para criar repositórios e executar queries. Mas você sabe como o Spring realmente gerencia as conexões com o banco de dados? E, principalmente, você entende as transações?
Este módulo revela os mecanismos essenciais para gerenciar seus dados de forma confiável e profissional.
🎓 Objetivos de Aprendizagem
Ao final deste módulo, você será capaz de:
- ✅ Configurar datasources no Spring Boot (HikariCP)
- ✅ Compreender e utilizar @Transactional corretamente
- ✅ Gerenciar níveis de propagação e isolamento
- ✅ Versionar seu schema de banco de dados com Flyway
- ✅ Comparar Flyway e Liquibase
- ✅ Conectar sua aplicação a diferentes bancos de dados (H2, PostgreSQL, MySQL)
📚 Pré-requisitos
Antes de começar este módulo, você deve ter:
- ✅ Completado os Módulos 1 a 6
- ✅ Criado entidades JPA com relacionamentos
- ✅ Utilizado repositórios Spring Data JPA
- ✅ Compreendido a arquitetura em 3 camadas (Controller, Service, Repository)
Se você não possui esses pré-requisitos, volte para os módulos anteriores!
🗺️ Plano do Módulo
Parte Teórica (4 capítulos)
Capítulo 1: Configuração de Datasources
Duração: 45 minutos
Conteúdo:
- O que é uma Datasource?
- Configuração em application.properties/yml
- HikariCP: o pool de conexões padrão
- Configuração avançada (min/max connections, timeout)
- Configuração multi-datasources
Por que é importante? Entender como o Spring Boot gerencia as conexões
Capítulo 2: Gerenciamento de Transações (@Transactional)
Duração: 1 hora
Conteúdo:
- O que é uma transação? (ACID)
- @Transactional explicado em detalhes
- Propagação (REQUIRED, REQUIRES_NEW, etc.)
- Níveis de isolamento
- Rollback e tratamento de exceções
- Armadilhas comuns a evitar
Por que é importante? Garantir a integridade dos dados
Capítulo 3: Migração de Schema com Flyway
Duração: 45 minutos
Conteúdo:
- Por que versionar o schema do banco de dados?
- Instalação e configuração do Flyway
- Convenção de nomenclatura (V1__, V2__, etc.)
- Migração SQL vs Java
- Rollback e repair
- Melhores práticas
Por que é importante? Implantar mudanças no banco de dados em produção
Capítulo 4: Migração com Liquibase
Duração: 30 minutos
Conteúdo:
- Flyway vs Liquibase: comparação
- Formato XML, YAML, JSON
- Changelog e changesets
- Rollback automático
- Quando escolher Liquibase?
Por que é importante? Conhecer as alternativas
Parte Prática (3 TPs)
TP7.1: Configuração de Datasource e Pool
Duração: 1h
Objetivo: Configurar e otimizar conexões com o banco de dados
Você irá:
- Configurar HikariCP para H2 e PostgreSQL
- Monitorar o pool de conexões
- Testar os limites de conexões
TP7.2: Transações e Rollback
Duração: 1h30
Objetivo: Dominar o uso de @Transactional
Você irá:
- Criar operações transacionais
- Simular erros e observar os rollbacks
- Testar a propagação (REQUIRED vs REQUIRES_NEW)
- Gerenciar transações somente leitura
TP7.3: Migração com Flyway
Duração: 1h30
Objetivo: Versionar o schema do banco de dados
Você irá:
- Configurar o Flyway
- Criar scripts de migração
- Simular uma evolução de schema
- Gerenciar dados iniciais
📊 Duração Total
| Tipo | Duração |
|---|---|
| Teoria | 3h (4 capítulos) |
| Prática | 4h (3 TPs) |
| Total | 7h (~2-3 sessões) |
🎯 O Que Você Vai Compreender
Antes deste Módulo
// Você escrevia isso sem realmente entender:
@Service
public class TransferService {
@Transactional // ← Por quê? O que isso faz?
public void transfer(Long from, Long to, BigDecimal amount) {
accountRepo.debit(from, amount);
accountRepo.credit(to, amount);
}
}
Perguntas sem resposta:
- O que acontece se
credit()falhar apósdebit()? - Por que usar @Transactional e não apenas try/catch?
- Como o Spring gerencia as conexões com o banco de dados?
- Como implantar mudanças de schema em produção?
Depois deste Módulo
@Service
public class TransferService {
@Transactional(
propagation = Propagation.REQUIRED, // ← Reutiliza ou cria uma transação
isolation = Isolation.READ_COMMITTED, // ← Nível de isolamento
rollbackFor = Exception.class // ← Rollback para qualquer exceção
)
public void transfer(Long from, Long to, BigDecimal amount) {
// Se credit() falhar, debit() é AUTOMATICAMENTE desfeito!
accountRepo.debit(from, amount);
accountRepo.credit(to, amount);
}
}
Você saberá:
- ✅ Como o Spring gerencia conexões (pool HikariCP)
- ✅ Quando e como usar @Transactional
- ✅ Evitar armadilhas comuns (proxy, self-invocation)
- ✅ Migrar o schema com Flyway sem riscos
- ✅ Escolher entre Flyway e Liquibase
🚀 Por Que Este Módulo É Crucial
1. Integridade dos Dados
Cenário catastrófico (sem transação):
1. Débito da conta A: -100€ ✓
2. Crédito da conta B: ERRO! ✗
3. Resultado: 100€ "desapareceram" 💀
As transações garantem: TUDO ou NADA.
2. Performance em Produção
Sem pool de conexões:
- Cada query = nova conexão = LENTO
- 1000 usuários = 1000 conexões = BANCO SOBRECARREGADO
Com HikariCP (pool):
- Conexões reutilizadas = RÁPIDO
- 1000 usuários = 10 conexões = BANCO FELIZ 😊
3. Deploy Sem Estresse
Sem Flyway:
- "Você executou o script SQL?" 🤔
- "Qual? V3 ou V4?" 😰
- "Ops, esqueci uma coluna" 💀
Com Flyway:
- Migrações automáticas na inicialização ✓
- Versionamento rastreado ✓
- Deploy tranquilo ✓
🗺️ Progresso na Formação
Módulo 7 = Dominar os fundamentos da persistência!
📖 Como Abordar Este Módulo
Teoria ANTES da Prática
-
Leia os 4 capítulos teóricos na ordem
- Capítulo 1: Datasources (fundamentos)
- Capítulo 2: Transações (o mais importante!)
- Capítulo 3: Flyway (migração principal)
- Capítulo 4: Liquibase (alternativa)
-
Faça os TPs na ordem
- TP7.1: Configuração
- TP7.2: Transações
- TP7.3: Flyway
Tempo Recomendado
Opção Intensiva (1 dia):
- Manhã: Capítulos 1 e 2 + TP7.1
- Tarde: TP7.2 + Capítulos 3 e 4
- Final da tarde: TP7.3
Opção Progressiva (2 sessões):
- Sessão 1: Capítulos 1-2 + TP7.1 e TP7.2
- Sessão 2: Capítulos 3-4 + TP7.3
✅ Autoavaliação
Antes de começar, responda:
- Você sabe o que é uma datasource? ☐ Sim ☐ Não
- Você conhece as propriedades ACID? ☐ Sim ☐ Não
- Você sabe o que faz o @Transactional? ☐ Sim ☐ Não
- Você já usou Flyway ou Liquibase? ☐ Sim ☐ Não
Se você respondeu "Não" para qualquer uma das perguntas → Este módulo é para você!
🎯 Próximo Passo
Pronto para dominar conexões e transações?
➡️ Comece pelo Capítulo 1: Configuração de Datasources