Primavera

Suporte a transações do Couchbase no Spring Data Couchbase

Suporte a transações foi adicionado recentemente aos SDKs do Couchbase. A partir de Spring Data Couchbase 5.0.0-M5O suporte a transações foi adicionado ao Dados do Spring Couchbase. Neste blog, descreveremos como usar o Spring Data @Transactional para aproveitar o Couchbase Transactions.

O base de dados de mola contém um repositório aplicativo de teste de dados de mola que realiza transações. Ele se baseia na amostra de viagem em um servidor Couchbase local. (qualquer bucket com um índice primário será suficiente).

Os beans que oferecem suporte ao gerenciamento de transações foram adicionados ao AbstractCouchbaseConfiguration. Para permitir que a classe de interceptador de transações integrada seja substituída pelo CouchbaseTransactionInterceptor, verifique se a seguinte linha está no arquivo application.properties file:

application.properties

A configuração da transação pode ser modificada substituindo o configureEnvironment() em sua classe que estende AbstractCouchbaseConfiguration. Aqui definimos o DurabilityLevel (nível de durabilidade) para NENHUM para que possamos trabalhar em nosso cluster de nó único.

Config.java

Na classe que os usará, precisamos definir o modelo como de costume e uma referência ao objeto de serviço. É importante observar que o objeto @Autowired preenche uma variável com um objeto proxy. Esse é um detalhe importante, pois os objetos proxy executam o processamento antes e depois de chamar o método real. A criação direta do objeto de serviço a partir de seu construtor fará com que a anotação @Transactional não tenha efeito.

CmdRunner.java

O serviço é definido com um @Serviço anotação. O construtor recebe argumentos que são @Bean de modo que a infraestrutura possa criar um objeto proxy para @Autowired.

AirlineGateService.java

AirlineGateService.java (continuação)

Agora use tudo o que construímos:

  1. salvar dois Portões de companhias aéreas documentos, cada um dos quais indica 200 portões
  2. verificar se eles foram salvos.
  3. executar o transferGates() método do serviço para transferir 50 portões de uma companhia aérea para outra em uma transação.
  4. verificar se a transferência foi realizada.
  5. tentativa de execução transferGates() novamente, desta vez com uma exceção que ocorre após o primeiro documento ter sido salvo.

    CmdRunner.java

Como funciona:

  • O Interceptador de transações @Bean in AbstractCouchbaseConfiguration substitui o Interceptador de transações para métodos anotados @Transactional.  
  • A anotação @Transactional faz com que o proxy para AirportGatesService para usar o Interceptador de transações para chamar o método anotado usando o CouchbaseCallbackTransactionManager.  
  • O CouchbaseCallbackTransactionManager inicializa uma transação e, em seguida, chama o método de serviço real no contexto da transação. 
  • Se a chamada do método for bem-sucedida, o CouchbaseCallbackTransactionManager confirma a transação. 
  • Se o commit for bem-sucedido, a chamada será retornada. 
  • Se o commit falhar com uma exceção que pode ser tentada novamente, o CouchbaseCallbackTransactionManger tentará novamente o processo completo de inicialização de uma nova transação, executando o método de serviço real e, em seguida, confirmando a transação. 

O CouchbaseCallbackTransactionManager repetirá isso até que o commit seja bem-sucedido ou o número máximo de tentativas seja atingido.

Opções para as próximas etapas

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Autor

Postado por Michael Reiche

5 Comentários

  1. Olá, pessoal - o projeto couchbase/transactions ainda não foi incorporado ao spring-data-examples. Ele estará disponível em breve.
    - Mike

  2. O projeto couchbase/transactions agora está disponível na ramificação boot-3

    https://github.com/spring-projects/spring-data-examples/tree/boot-3/couchbase/transactions

  3. O exemplo de transação precisa do spring-boot-starter-data-couchbase 3.0.0-RC2 para ser executado devido a uma incompatibilidade com o reactor em outras versões 3.0.0*.

  4. Olá, Michael, obrigado por implementar o suporte integrado a transações do couchbase. Funciona muito bem quando uso "couchbase transaction" usando um único bucket, mas tenho um erro em transações usando vários buckets.

    Implementei este link https://github.com/spring-projects/spring-data-couchbase/issues/878. Essa implementação não está funcionando com transações. Você tem alguma ideia?

  5. Michael Reiche abril 3, 2023 em 12:45 pm

    As transações do Spring Data Couchbase não funcionarão com vários buckets, pois vários buckets no Spring Data Couchbase exigem várias conexões com o Couchbase e a transação deve estar em uma única conexão.
    - Mike

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.