按租户分库问题 返回

求助
7 302
    public class SugarTenant
    {
        public SqlSugarProvider Context { get; set; }
        public ConnectionConfig ConnectionConfig { get; set; }
    }
private List<SugarTenant> _AllClients;


SqlSugarClient维护一个_AllClients

SqlSugarClient是一个全局单例


_AllClients一直存在,这种情况下,如果租户信息发生变更,意思是某个SugarTenant的的ConnectionConfig发生变化,如果我的配置中心管理ConnectionConfig列表,我每次更新时候都会把Context = null, 下次Context使用的时候会更新Context

        private void InitTenant(SugarTenant Tenant)
        {
            if (Tenant.Context == null)
            {
            //根据这里我每次更新时候都会把Context = null, 下次Context使用的时候会更新最新的Context
                Tenant.Context = new SqlSugarProvider(Tenant.ConnectionConfig);
            }
            _Context = Tenant.Context;
            this.CurrentConnectionConfig = Tenant.ConnectionConfig;
        }

但这样方案有个弊端,我更新ConnectionConfig后会把Context变为null,那这一时刻正在使用该Context的事务会发生什么问题,我应该如何处理这个问题?或者有什么更好的解决方案?

热忱回答7

  • Dn不能是静态的

    0 回复
  • db对象

    0 回复
  • 每次new出来就好

    0 回复
  • 你意思是让我SqlSugarClient每次访问都new一个,然后它的db就是新的,我自己单独维护一个租户配置表,每次都注入SqlSugarClient里?这样SqlSugarClient每次都new会对性能影响大吗?我还是更倾向于SqlSugarClient单例,即db也单例,就是db没法知道当前还有没有任务

    0 回复
  • @fate stay night:因为配置这些一般都不变的,就算变配置时候瞬态故障,也会进行重试,没必要为了这一点而每次都进行实例化,得不偿失。

    0 回复
  • 性能没影响

    0 回复
  • 对象都是指针操作gc会回收 可以忽略性能

    0 回复

版块

学习文档

最新会员

发布达人

回贴达人