使用 dev.miku 的 R2BC for MYSQL 中的事务

问题描述 投票:0回答:1

我试图实现简单的事务机制只是为了检查它在使用 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>

我是否需要为我的目的导入一些其他依赖项,或者我做错了什么

spring-boot transactions spring-webflux reactor r2dbc
1个回答
0
投票

问题的根本原因是

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
.

的正式继承者
© www.soinside.com 2019 - 2024. All rights reserved.