热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

r2dbc配置多数据源

R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d
R2dbc配置多数据源问题

根据官网配置r2dbc 连接mysql多数据源所遇到的问题
pom配置可以参考官网,
不过我这样配置会报错 我并没有这样配置
将以下内容添加到 pom.xml 文件dependencies元素:

io.r2dbcr2dbc-bom${r2dbc-releasetrain.version}pomimport
org.springframework.dataspring-data-r2dbc1.3.3io.r2dbcr2dbc-h2Arabba-SR10

将 pom.xml 中 Spring 的版本改为

5.3.9

将 Maven 的 Spring Milestone 存储库的以下位置添加到您的位置pom.xml,使其与您的元素处于同一级别:

spring-milestoneSpring Maven MILESTONE Repositoryhttps://repo.spring.io/libs-milestone

以下是官网原话
当使用多个可能不同的数据库时,您的应用程序将需要不同的配置方法。所提供的AbstractR2dbcConfiguration支持类假定单个ConnectionFactory从中Dialect得到的。话虽如此,您需要自己定义一些 bean 来配置 Spring Data R2DBC 以处理多个数据库。

R2DBC 存储库需要R2dbcEntityOperations实现存储库。无需使用即可扫描存储库的简单配置AbstractR2dbcConfiguration如下所示:
但是有一个问题 官方的这个显示返回的类型是一个Operations 是他的接口 导致spring无法注入这个对象 不知道是bug还是版本问题。会出现

Cannot determine database’s type as ConnectionFactory is not options-capable
无法确定数据库的类型,因为ConnectionFactory不支持选项

在这里插入图片描述

所以我们将返回类型改为R2dbcEntityTemplate 即可

@Configuration
@EnableR2dbcRepositories(basePackages = "com.acme.mysql", entityOperationsRef = "mysqlR2dbcEntityOperations")
static class MySQLConfiguration {@Bean@Qualifier("mysql")public ConnectionFactory mysqlConnectionFactory() {return}@Beanpublic R2dbcEntityTemplate mysqlR2dbcEntityOperations(@Qualifier("mysql") ConnectionFactory connectionFactory) {DatabaseClient databaseClient = DatabaseClient.create(connectionFactory);return new R2dbcEntityTemplate(databaseClient, MySqlDialect.INSTANCE);}
}

这样我们就可以灵活的切换数据源了
例如:
cofig配置文件

@Configuration
@EnableR2dbcRepositories(basePackages = "webflux.demo", entityOperationsRef = "mysqlR2dbcEntityOperations")
public class config {@Bean("mysql")public ConnectionFactory mysqlConnectionFactory() {ConnectionFactoryOptions options = builder().option(DRIVER, "mysql").option(HOST, "").option(PORT, 3306).option(USER, "").option(PASSWORD, "").option(SSL, false).option(DATABASE, "nlp").build();ConnectionFactory connectionFactory = ConnectionFactories.get(options);return connectionFactory;}@Bean("ecs")public ConnectionFactory mysqlConnectionFactory1(){ConnectionFactoryOptions options = builder().option(DRIVER, "mysql").option(HOST, "").option(PORT, 3306).option(USER, "").option(PASSWORD, "").option(SSL, false).option(DATABASE, "r2dbc").build();ConnectionFactory connectionFactory = ConnectionFactories.get(options);return connectionFactory;}@Bean("nlp")public R2dbcEntityTemplate mysqlR2dbcEntityOperations(@Qualifier("mysql") ConnectionFactory connectionFactory) {DatabaseClient databaseClient = DatabaseClient.create(connectionFactory);return new R2dbcEntityTemplate(databaseClient, MySqlDialect.INSTANCE);}@Bean("r2dbc")public R2dbcEntityTemplate mysqlR2dbcEntityOperations1(@Qualifier("ecs") ConnectionFactory connectionFactory) {DatabaseClient databaseClient = DatabaseClient.create(connectionFactory);return new R2dbcEntityTemplate(databaseClient, MySqlDialect.INSTANCE);}
}

测试
我们用Qualifier指定哪个数据源 然后就可以使用

@RestController
@RequestMapping("/demo")
public class DemoController {&#64;Autowired&#64;Qualifier("nlp")R2dbcEntityTemplate nlp;&#64;Autowired&#64;Qualifier("r2dbc")R2dbcEntityTemplate user;&#64;RequestMapping("/a")public Mono<List<User>> a() throws InterruptedException {Mono<List<User>> listMono &#61; user.select(User.class).all().collectList();return listMono;} &#64;RequestMapping("/cc")public Mono<Video> aaa() {Mono<Video> one &#61; nlp.select(Video.class).from("video").matching(Query.query(Criteria.where("video_id").is("37"))).one();return one;}
}

测试结果
以下是2个不同的数据库
在这里插入图片描述
在这里插入图片描述


推荐阅读
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文介绍了Kettle资源库的基本概念、类型及其管理方法,同时探讨了Kettle的不同运行方式,包括图形界面、命令行以及API调用,并详细说明了日志记录的相关配置。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • [论文笔记] Crowdsourcing Translation: Professional Quality from Non-Professionals (ACL, 2011)
    Time:4hoursTimespan:Apr15–May3,2012OmarZaidan,ChrisCallison-Burch:CrowdsourcingTra ... [详细]
  • 在macOS环境下使用Electron Builder进行应用打包时遇到签名验证失败的问题,具体表现为签名后spctl命令检测到应用程序未通过公证(Notarization)。本文将详细探讨该问题的原因及解决方案。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文将介绍由密歇根大学Charles Severance教授主讲的顶级Python入门系列课程,该课程广受好评,被誉为Python学习的最佳选择。通过生动有趣的教学方式,帮助初学者轻松掌握编程基础。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 了解如何快速搭建属于自己的个人博客,无需编程基础,适合Mac和Windows用户。通过本文,您将学会使用GitHub Pages和Hexo构建一个完全自主的在线空间。 ... [详细]
author-avatar
中哒瘋
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有