Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

626
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda