我试图实现简单的事务机制只是为了检查它在使用 dev.miku for Mysql 的反应世界中如何工作但是低于错误
Receiver class dev.miku.r2dbc.mysql.MySqlConnection does not define or inherit an implementation of the resolved method 'abstract org.reactivestreams.Publisher beginTransaction(io.r2dbc.spi.TransactionDefinition)'
我写的代码如下
@Autowired
private TransactionalOperator operator;
public Mono<ServerResponse> insertUserData(ServerRequest serverRequest) {
return serverRequest.bodyToMono(UserAndFamilyRequest.class)
.flatMap(saveFamilyMembers())
.as(operator::transactional) //using transactional operator
.flatMap(familyMemberEntity -> ServerResponse.ok()
.contentType(MediaType.APPLICATION_JSON)
.bodyValue(familyMemberEntity));
}
private Function<UserAndFamilyRequest, Mono<List<FamilyMemberEntity>>> saveFamilyMembers() {
return userAndFamilyRequest -> {
User user = userAndFamilyRequest.getUser();
UserEntity userEntity = new UserEntity();
userEntity.setName(user.getName());
userEntity.setAge(user.getAge());
userEntity.setSeats(user.getSeats());
userRepo.save(userEntity);
List<FamilyMember> list = userAndFamilyRequest.getFamilyMemberList();
var entityList = list.stream().map(familyMember -> {
FamilyMemberEntity familyMemberEntity = new FamilyMemberEntity();
familyMemberEntity.setName(familyMember.getName());
familyMemberEntity.setAge(familyMember.getAge());
return familyMemberEntity;
}).collect(Collectors.toList());
return familyRepo.saveAll(entityList).collect(Collectors.toList());
};
}
我尝试使用@Transactional 注释方法insertUserData,但得到相同的错误。 使用下面的依赖
<dependency>
<groupId>dev.miku</groupId>
<artifactId>r2dbc-mysql</artifactId>
<version>0.8.2.RELEASE</version>
</dependency>
我是否需要为我的目的导入一些其他依赖项,或者我做错了什么
问题的根本原因是
dev.miku:r2dbc-mysql:0.8.2
没有实现beginTransaction(TransactionDefinition)方法。此版本的 r2dbc-mysql 已经过时(截至目前已有 3 年历史)并且不再维护。
我建议尝试
io.asyncer:r2dbc-mysql:0.9.1
或 io.asyncer:r2dbc-mysql:1.0.0
,具体取决于您的 Spring Data 版本。 io.asyncer:r2dbc-mysql 是 dev.miku:r2dbc-mysql
. 的正式继承者