数据库切库支持 #
mall3s微服务项目底层采用sqlsugar orm组件,在项目开发中可以很方便做数据库切库支持。
数据库自动切库 #
nacos配置好数据库连接.
在netcore-datasource.json****上新增配置
{
"DemoConnectionStrings": {
"ConfigId": "blt_demo",//租户ID,通常使用数据库名不带环境,如blt_oms_test/blt_oms_pro,租户ID使用blt_oms
"DBName": "blt_demo",//数据库名
"DBType": "MySql",//数据库类型
"DefaultConnection": "server=sh-cdb-s261yedo.sql.tencentcdb.com;port=59347;uid=erpdba;pwd=erp123!@#;database={0}"//数据库链接
}
}
名词解释:
ConfigId为关键点,为了避免冲突,请使用数据库名不带环境,如blt_oms_test/blt_oms_pro,租户ID使用blt_oms,同一次启动服务,切勿同时注入正式和测试环境。
如在netcore-项目-common.json(如netcore-demo-common.json)上配置了**ExtraDB****,**如下,则直接调用services.AddMicroService(_configuration)即可
{ "ExtraDB":["DemoConnectionStrings"] //扩展库为DemoConnectionStrings }
代码配置
netcore-datasource.json
{ "DemoConnectionStrings": { "ConfigId": "blt_demo", "DBName": "blt_demo", "DBType": "MySql", "DefaultConnection": "server=sh-cdb-s261yedo.sql.tencentcdb.com;port=59347;uid=erpdba;pwd=erp123!@#;database={0}" } }
netcore-demo-common.json
{ "ExtraDB":["DemoConnectionStrings"] //扩展库为DemoConnectionStrings }
Startup.cs
启动代码
public void ConfigureServices(IServiceCollection services) { //除了默认DB和租户DB外的DB #if DEBUG //添加微服务(debug不验证token) services.AddMicroService(_configuration, false); #else //添加微服务 services.AddMicroService(_configuration, true); #endif .... } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { .... //注入微服务 app.UseMicroService(_configuration); .... }
微服务有四个实现,下面两个为自定义扩展库,可灵活选择:
//实现一:nacos配置好DB链接信息,直接告知微服务需要额外加入的DB的key public static IServiceCollection AddMicroService(this IServiceCollection services, IConfiguration configuration, bool enableGlobalAuthorize = false, List<string> connKeys = null) //实现二:自行配置DB配置后赋值 public static IServiceCollection AddMicroService(this IServiceCollection services, IConfiguration configuration,bool enableGlobalAuthorize= false, List<ConnectionConfig> connectionConfigs = null)
实体类
TenantAttribute 中的 configId值“blt_demo”对应nacos配置中的ConfigId,切记,不可乱填。
实体类没有TenantAttribute属性的,依旧需要手动切库
[SugarTable("exchange_rate")]
[Tenant("blt_demo")] //blt_demo对应nacos配置中的ConfigId
public class ExchangeRateEntity
{
...
}
4、代码调用
必须使用ISqlSugarRepository<TEntity>,才能实现自动切库
private readonly ISqlSugarRepository<ExchangeRateEntity> _exchangeRateRepository;
private readonly ISqlSugarRepository<DbLinkEntity> _dbLinkRepository;
public async Task Test()
{
//无需切库直接调用即可
var dbs = await _dbLinkRepository.ToListAsync();
var exchangeRate = await _exchangeRateRepository.ToListAsync();
}