Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

620
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!