按租户分库问题 返回

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)
-
fate stay night VIP0
2019/8/8Dn不能是静态的
0 回复 -
fate stay night VIP0
2019/8/8db对象
0 回复 -
fate stay night VIP0
2019/8/8每次new出来就好
0 回复 -
蓝の衫 VIP0
2019/8/8你意思是让我SqlSugarClient每次访问都new一个,然后它的db就是新的,我自己单独维护一个租户配置表,每次都注入SqlSugarClient里?这样SqlSugarClient每次都new会对性能影响大吗?我还是更倾向于SqlSugarClient单例,即db也单例,就是db没法知道当前还有没有任务
0 回复 -
蓝の衫 VIP0
2019/8/8@fate stay night:因为配置这些一般都不变的,就算变配置时候瞬态故障,也会进行重试,没必要为了这一点而每次都进行实例化,得不偿失。
0 回复 -
fate stay night VIP0
2019/8/9性能没影响
0 回复 -
fate stay night VIP0
2019/8/9对象都是指针操作gc会回收 可以忽略性能
0 回复