gpt4 book ai didi

使用 @transactional 注释的 Spring Boot Transaction 支持不适用于 mongoDB,有人有解决方案吗?

转载 作者:行者123 更新时间:2023-12-04 07:54:09 24 4
gpt4 key购买 nike

Spring Boot 版本 - 2.4.4,
mongodb 版本 - 4.4.4
在我的项目中,我想在 2 个不同的 mongodb 文档中输入,但如果一个失败,则应该回滚。 mongodb 支持 4.0 之后的事务,但前提是您至少有一个副本集。
就我而言,我没有副本集,也无法根据我的项目结构创建它。我不能使用 mongodb 的事务支持,因为没有副本集。所以,我正在使用 Spring Transaction。
根据 spring 文档,要在 Spring Boot 中使用事务,您只需要使用 @transactional 注释,一切都会工作(即回滚或提交)。
我从许多来源尝试了很多东西,但如果一个失败,它不会回滚事务。
演示代码在这里,
这是演示代码,不是实际项目。
这是我的服务类。

@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);

}
}
也尝试了下面的代码但仍然无法正常工作,
@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";
}
}

最佳答案

Spring 中的事务支持只是为了让事情变得更容易,它不会取代对正在使用的底层数据存储的事务支持。
在这种情况下,它将简单地将事务的启动/提交委托(delegate)给 MongoDB。当使用数据库时,它最终会委托(delegate)给数据库等。
在这种情况下,仍然需要满足 MongoDB 的先决条件,并且您仍然需要一个副本。

关于使用 @transactional 注释的 Spring Boot Transaction 支持不适用于 mongoDB,有人有解决方案吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66796288/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com