Quando metade da operação funciona, você pode ter um problema inteiro
Leia. Curta. Comente. Compartilhe.
...
Entenda como @Transactional e rollback ajudam a evitar dados inconsistentes quando uma operação possui várias etapas e alguma coisa dá errado no meio do caminho.
...
TRANSACTIONAL
Imagine que você vai fazer uma transferência de R$ 100.
O sistema começa:
Retira R$ 100 da sua conta
↓
↓
ERRO
↓
O dinheiro não chega na outra conta
Pronto.
Você acabou de mandar R$ 100 diretamente para o triângulo das Bermudas do banco de dados.
É justamente para evitar situações desse tipo que precisamos entender transações.
Algumas operações precisam ser um pacote completo
Pense em comprar um produto pela internet.
O sistema pode precisar:
Diminuir o estoque
Registrar o pedido
Registrar o pagamento
Agora imagine que ele diminui o estoque e depois dá erro antes de criar o pedido.
O produto sumiu do estoque, mas ninguém comprou.
Nada bom.
Nessas situações, queremos uma regra simples:
Ou todas as etapas dão certo, ou nenhuma delas fica pela metade.
É aí que entra uma transação.
E onde entra o @Transactional?
No Spring, podemos encontrar algo assim:
@Transactional
public void transferir() {
debitarConta();
creditarConta();
}
Ao usar @Transactional, estamos dizendo que aquelas alterações fazem parte de uma mesma transação.
Se tudo funcionar:
Débito ✓
Crédito ✓
A operação pode ser confirmada.
Isso é o commit.
Mas se alguma coisa der errado:
Débito ✓
Crédito ✗
podemos precisar desfazer as alterações realizadas.
É aí que aparece o famoso rollback.
Rollback é basicamente o Ctrl + Z da operação
Imagine que você está preenchendo um formulário enorme.
Preenche nome.
Endereço.
Telefone.
Pagamento.
Aí descobre que alguma informação essencial está errada e precisa cancelar tudo.
O rollback segue uma ideia parecida:
“Essa operação não conseguiu terminar corretamente. Vamos voltar ao estado anterior.”
Assim evitamos deixar dados inconsistentes pelo caminho.
Mas @Transactional não é botão mágico
É tentador descobrir essa anotação e pensar:
@Transactional
“Pronto. Protegi o universo.”
Não exatamente.
Você ainda precisa entender quais operações realmente precisam acontecer juntas e quais erros devem fazer aquela transação voltar atrás.
A anotação ajuda bastante, mas a regra continua sendo sua.
3 coisas para lembrar
1. Pense no que não pode ficar pela metade
Transferências, pagamentos, pedidos e atualizações relacionadas são bons exemplos.
Pergunte:
“Se der erro na segunda etapa, a primeira pode continuar existindo?”
Se a resposta for não, vale investigar uma transação.
2. Commit confirma
Tudo deu certo?
Commit.
As alterações podem permanecer.
3. Rollback volta atrás
Algo importante falhou?
Rollback.
A ideia é evitar deixar metade da história salva no banco.
No fim, transação é sobre consistência
@Transactional parece apenas mais uma anotação do Spring.
Mas por trás dela existe uma ideia muito importante:
certas operações só fazem sentido quando acontecem por completo.
Porque uma transferência pela metade não é meia transferência.
É um problema inteiro.
E dependendo do valor que desapareceu no caminho, provavelmente um problema com alguém ligando para o suporte também.
>> Você já tinha parado para pensar no que aconteceria com seus dados se uma operação falhasse exatamente no meio?
__
Indicação de livro
Spring Start Here
Autor: Laurentiu Spilca
É uma boa leitura para entender melhor os recursos do Spring e o que acontece por trás de várias anotações que parecem simples quando aparecem no código.



