使用 Spring Boot 的多个 R2DBC 数据源
Posted
技术标签:
【中文标题】使用 Spring Boot 的多个 R2DBC 数据源【英文标题】:Multiple R2DBC datasource with Spring boot 【发布时间】:2021-03-07 01:43:46 【问题描述】:我想将我的应用程序迁移到 WebFlux,但棘手的部分是我的 bean 通过这种机制连接到 6 个数据源
public class MultiRoutingDataSource extends AbstractRoutingDataSource
@Override
protected Object determineCurrentLookupKey()
return //code which sets context for chosen db;
然后我创建 6 个数据源,然后由 multiRoutingDataSource 管理
@Bean(name = "multiRoutingDataSource")
public DataSource multiRoutingDataSource()
Map<Object, Object> targetDataSources = new HashMap<>();
targetDataSources.put(ident, MyDataSourceBean());
MultiRoutingDataSource multiRoutingDataSource = new MultiRoutingDataSource();
multiRoutingDataSource.setTargetDataSources(targetDataSources);
return multiRoutingDataSource;
并且此数据源可以在运行时更改。然后将此 multiRouting 设置到实体管理器中。
WebFlux 有类似的东西吗?
我找到了
public class MultiRoutingDataSource extends AbstractRoutingConnectionFactory
@Override
protected Mono<Object> determineCurrentLookupKey()
return null;
但是如何创建带有连接的 bean 并在运行时切换它们,就像我在 Spring MVC 中所做的那样?
【问题讨论】:
【参考方案1】:如果您想在同一个应用程序中使用多个 R2dbc 连接工厂,请查看我的示例 multi-r2dbc-connectionfactories。
有关多租户支持,请查看multi-tenancy-r2dbc。
【讨论】:
我查看了 multi-tenancy-r2dbc 示例并尝试为我的应用程序复制它。 AbstractRoutingConnectionFactory 的 determineTargetConnectionFactory() 和因此的 determineCurrentLookupKey() 没有在每个请求上被调用,因此,多租户不起作用。 @aditya 添加一个 Github 操作工作流来运行集成测试,按预期工作。我不对你的项目负责!以上是关于使用 Spring Boot 的多个 R2DBC 数据源的主要内容,如果未能解决你的问题,请参考以下文章
带有 JPA 和 R2DBC 的 Spring Boot 2.4 混合项目无法启动
带有 MySQL 的 Spring Boot R2DBC - 异常:找不到表
使用 spring r2dbc 时找不到 javax.persistence 注释
Spring R2DBC DatabaseClient.as(…)