webflux同时接mongodb和mysql或者redis

其他的后面再写,先写重点。

做到这一步说明至少r2dbc应该是接过了,如果看的网上大部分教程,那么dao层大概率继承的是ReactiveCrudRepository吧,这么做的话再接redis或者mongo必报错,因为r2bc和mongodb-reactive都实现了ReactiveCrudRepository,所以spring不知道该注入哪个。

上个dao代码吧,如果你是这么写的那接起来程序必然无法启动:

import com.df.dfclouddevice.entity.AAA;
import org.springframework.data.r2dbc.repository.R2dbcRepository;
import reactor.core.publisher.Mono;


public interface CCCRepository extends ReactiveCrudRepository<AAA, Long> {

    Mono<AAA> findByName(String name);

}

解决方法:

1.自己重写一个Repository,在里面声明你要接哪个数据源、扫描哪些包下的类;

2.用各自的Repository,连数据库的dao不再继承ReactiveCrudRepository,而是继承R2dbcRepository,其实你点开看看R2dbcRepository最后还是继承的ReactiveCrudRepository。mongo的就用ReactiveMongoRepository,点到最后也是ReactiveCrudRepository。

改完如下:

import com.df.dfclouddevice.entity.AAA;
import org.springframework.data.r2dbc.repository.R2dbcRepository;
import reactor.core.publisher.Mono;


public interface CCCRepository extends R2dbcRepository<AAA, Long> {

    Mono<AAA> findByName(String name);

}

spring官方回答是这样的,看11.3.2:

弹簧数据 R2DBC - 参考文档 (spring.io)

如果要用这个写法,那dao层的代码就不能写成Mono或者Flux的形式,因为用的是jpa。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值