Pular para o conteúdo principal

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:

  1. ✅ Configurar datasources no Spring Boot (HikariCP)
  2. ✅ Compreender e utilizar @Transactional corretamente
  3. ✅ Gerenciar níveis de propagação e isolamento
  4. ✅ Versionar seu schema de banco de dados com Flyway
  5. ✅ Comparar Flyway e Liquibase
  6. ✅ 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​

TipoDuração
Teoria3h (4 capítulos)
Prática4h (3 TPs)
Total7h (~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ós debit()?
  • 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​

  1. 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)
  2. 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:

  1. Você sabe o que é uma datasource? ☐ Sim ☐ Não
  2. Você conhece as propriedades ACID? ☐ Sim ☐ Não
  3. Você sabe o que faz o @Transactional? ☐ Sim ☐ Não
  4. 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


⬅️ Voltar ao Plano de Curso