Spring + Mybatis Dynamic DataSource

该博客介绍了如何在Spring+Mybatis应用中实现Runtime切换和添加DataSource,以支持schema based multi-tenant。作者提供了GitHub仓库链接,包含3个分支:基础版、Runtime切换DataSource和Runtime添加DataSource。内容包括预先定义DataSource的效果和代码实现,以及Runtime添加DataSource的效果和代码实现,详细阐述了Tenant-ID控制、MultitenantDataSource的创建和管理等关键步骤。
摘要由CSDN通过智能技术生成

为了做隔离性比较好的multi-tenant app,决定做schema based multi-tenant,这就需要
- Runtime切换DataSource
- 为了使添加新tenant不用重启,最好还能实现Runtime添加DataSource

所以分2步实现这两个功能。

代码:https://github.com/fanjingdan012/ssm
目前有3个branch
- master是基础版Spring+Mybatis+Mariadb,能Read一个DataSource
- multi-data-source是实现Runtime切换DataSource的
- multi-tenant是实现现Runtime添加DataSource的

1.预先定义DataSource,Runtime切换

1.1.效果

  • 数据库准备,这里用了mariadb,用了两个schema, test和test2,里面是同样的一张member表,插入一点不同的数据
    这里写图片描述
  • 用header控制Tenant-ID,从而访问不同的DataSource
    这里写图片描述

1.2.代码

写一个MultitenantDataSource.java, MultitenantDataSource extends AbstractRoutingDataSource

看一下AbstractRoutingDataSource的源代码

    protected DataSource determineTargetDataSource() {
        Assert.notNull(this.resolvedDataSources, "DataSource router not initialized");
        Object lookupKey = determineCurrentLookupKey();
        DataSource dataSource = this.resolvedDataSources.get(lookupKey);
        if (dataSource == null && (this.lenientFallback || lookupKey == null)) {
            dataSource = this.resolvedDefaultDataSource;
        }
        if (dataSource == null) {
            throw new IllegalSt
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值