【问题标题】:Multiple R2DBC datasource with Spring boot使用 Spring Boot 的多个 R2DBC 数据源
【发布时间】: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 中所做的那样?

【问题讨论】:

    标签: spring-boot spring-mvc spring-webflux spring-data-r2dbc


    【解决方案1】:

    如果您想在同一个应用程序中使用多个 R2dbc 连接工厂,请查看我的示例 multi-r2dbc-connectionfactories

    有关多租户支持,请查看multi-tenancy-r2dbc

    【讨论】:

    • 我查看了 multi-tenancy-r2dbc 示例并尝试为我的应用程序复制它。 AbstractRoutingConnectionFactory 的 determineTargetConnectionFactory() 和因此的 determineCurrentLookupKey() 没有在每个请求上被调用,因此,多租户不起作用。
    • @aditya 添加一个 Github 操作工作流来运行集成测试,按预期工作。我不对你的项目负责!
    猜你喜欢
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    • 1970-01-01
    • 2020-12-14
    • 2023-03-20
    相关资源
    最近更新 更多