"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Compreendendo @Transactional no Spring Boot

Compreendendo @Transactional no Spring Boot

Publicado em 2024-07-29
Navegar:138

Understanding @Transactional in Spring Boot

O gerenciamento de transações no Spring Boot pode ser feito usando a anotação @Transactional. Nesta postagem do blog, exploraremos como usar @Transactional para garantir a consistência dos dados e simplificar o tratamento de erros em seus aplicativos Spring Boot.

1. Uso Básico

Para usar @Transactional, você normalmente o coloca em métodos de uma classe de serviço onde deseja o comportamento transacional.

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserService{

    @Transactional
    public void createUser() {
        // enter your transactional code here
    }
}

2. Níveis de propagação e isolamento

Você pode especificar os níveis de propagação e isolamento de uma transação para controlar como a transação se comporta:

  • Propagação: define como a transação se comporta quando uma transação existente já está em execução.

  • Isolamento: Define o nível de visibilidade dos dados da transação.

@Transactional(propagation = Propagation.REQUIRED, 
              isolation = Isolation.READ_COMMITTED)
public void createUser() {
    // enter your transactional code here
}

3. Regras de reversão

Você pode especificar quais exceções devem acionar uma reversão:

@Transactional(rollbackFor = Exception.class)
public void createUser() {
    // your transactional code here
}

4. Transações somente leitura

Se o seu método apenas lê dados e não executa nenhuma operação de gravação, você pode marcá-lo como somente leitura para otimizações de desempenho:

@Transactional(readOnly = true)
public void getUser() {
    // your read-only code here
}

5. Transacional em Classes

Você também pode colocar @Transactional no nível da classe para aplicá-lo a todos os métodos da classe:

@Service
@Transactional
public class UserService {

    public void getUser() {
        // transactional code
    }

    public void createUser() {
        // transactional code
    }
}

Exemplo de serviço com métodos transacionais

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserService {

    @Transactional
    public void saveUser() {
        // code to save data
    }

    @Transactional(readOnly = true)
    public void fetchUser() {
        // code to fetch data
    }

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void newTransaction() {
        // code to execute in a new transaction
    }

    @Transactional(rollbackFor = {CustomException.class})
    public void performWithRollback() {
        // risky code that may throw CustomException
    }
}

Resumo

Usar @Transactional Spring Boot permite gerenciar transações de forma declarativa, especificando exatamente como você deseja que as transações se comportem em vários cenários. Isso ajuda a garantir a consistência dos dados e simplifica o tratamento de erros em seus aplicativos.

Referências

https://www.baeldung.com/spring-transactions-read-only

https://docs.spring.io/spring-framework/reference/data-access/transaction/declarative/annotations.html

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/transaction/annotation/Transactional.html

Github: https://github.com/tharindu1998/transactional-blog

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/tharindufdo/understanding-transactional-in-spring-boot-8ce?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3