Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

625
Visualizações
El soporte de Spring Boot Transaction usando la anotación @transactional no funciona con mongoDB, ¿alguien tiene una solución para esto?

Versión Spring Boot - 2.4.4, versión mongodb - 4.4.4

En mi proyecto, quiero ingresar en 2 documentos diferentes de mongodb, pero si uno falla, debería retroceder. mongodb admite transacciones posteriores a la versión 4.0, pero solo si tiene al menos un conjunto de réplicas.

En mi caso, no tengo un conjunto de réplicas y tampoco puedo crearlo de acuerdo con la estructura de mi proyecto. No puedo usar el soporte de transacciones de mongodb porque no hay un conjunto de réplicas. Entonces, estoy usando Spring Transaction.

De acuerdo con los documentos de Spring, para usar la transacción en Spring Boot, solo necesita usar la anotación @transactional y todo funcionará (es decir, revertir o confirmar). Intenté muchas cosas de muchas fuentes, pero no se está revirtiendo la transacción si una falla.

El código de demostración está aquí. Este es un código de demostración, no un proyecto real. Esta es mi clase de servicio.

 @Service public class UserService { @Autowired UserRepository userRepository; @Autowired UserDetailRepository userDetailRepository; @Transactional(rollbackFor = Exception.class) public ResponseEntity<JsonNode> createUser(SaveUserDetailRequest saveUserDetailRequest) { try { User _user = userRepository.save(new User(saveUserDetailRequest.getId(), saveUserDetailRequest.getFirstName(), saveUserDetailRequest.getLastName())); UserDetail _user_detail = userDetailRepository.save(new UserDetail(saveUserDetailRequest.getPhone(), saveUserDetailRequest.getAddress())); } catch (Exception m) { System.out.print("Mongo Exception"); } return new ResponseEntity<>(HttpStatus.OK); } }

También probé el siguiente código pero aún no funciona,

 @EnableTransactionManagement @Configuration @EnableMongoRepositories({ "com.test.transaction.repository" }) @ComponentScan({"com.test.transaction.service"}) public class Config extends AbstractMongoClientConfiguration{ private com.mongodb.MongoClient mongoClient; @Bean MongoTransactionManager transactionManager(MongoDbFactory dbFactory) { return new MongoTransactionManager(dbFactory); } @Bean public com.mongodb.MongoClient mongodbClient() { mongoClient = new com.mongodb.MongoClient("mongodb://localhost:27017"); return mongoClient; } @Override protected String getDatabaseName() { return "test"; } }
over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

El soporte de transacciones en Spring solo está ahí para facilitar las cosas, no reemplaza el soporte de transacciones para el almacén de datos subyacente que se está utilizando.

En este caso, simplemente delegará el inicio/compromiso de una transacción a MongoDB. Cuando use una base de datos, eventualmente delegará a la base de datos, etc.

Como este es el caso, los requisitos previos para MongoDB aún deben cumplirse y aún necesitará una réplica.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda