博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分库情况下的数据库连接注入
阅读量:5161 次
发布时间:2019-06-13

本文共 1515 字,大约阅读时间需要 5 分钟。

  公司数据量已经达到亿级别,原有的单库主从方案不能满足使用了,所以我们进行了分库分表。分库造成原来项目直接注入DbContext的模式无法使用。现在数据连接字符串是根据请求的主体变动的,不能像以前那样直接构造函数注入。

工厂方法

所以,我们考虑使用工厂方法,根据请求主体生成不同的数据库连接。

这里我们使用了IHttpContextAccessor来获取请求上下文,然后根据请求上下文生成数据库连接,ConnectionFactory工厂代码如下

//构造函数public ConnectionFactory(IHttpContextAccessor accessor){    string conStr;#if DEBUG    conStr = ConfigurationManager.GetValue("ConnectionString");#else    conStr = accessor.GetConnectionString();#endif    Connection = string.IsNullOrEmpty(conStr) ? new MySqlConnection(ConfigurationManager.GetValue("ConnectionString")) : new MySqlConnection(conStr);}/// /// 根据传入字符串更改连接/// /// /// 
public MySqlConnection ExchangeConnection(string connectionStr){ Connection=new MySqlConnection(connectionStr); return Connection;}//对外公开的连接public MySqlConnection Connection { get; set; }

使用方法

直接注入工厂,然后获取Connection属性

private readonly IDbConnection _connection;public CallHistoryRepository(ConnectionFactory connectionFactory){    _connection = connectionFactory.Connection;}

在startup中注册Scoped类型的注入

services.AddScoped
();

遇到的问题

  我们有些场景需要更换使用的数据库连接,但是如果我们使用ExchangeConnection方法,那么工厂方法里面的连接是改变成最新的了,但是类中的私有变量IDbConnection _connection引用的还是构造函数注入的老的数据库连接,这时候可以考虑使用懒加载,如下

private readonly Lazy
_connectionLazy;public CallHistoryRepository(ConnectionFactory connectionFactory){ _connectionLazy = new Lazy
(()=>connectionFactory.Connection);}

       这样,无论你在service层更改几次对应的数据库连接,仓储层都会使用最新的连接,完成特定操作。

 

转载于:https://www.cnblogs.com/qixinbo/p/11347265.html

你可能感兴趣的文章
shell脚本传参
查看>>
java输入分数显示等级
查看>>
MySQL备份之【mydumper 学习】
查看>>
CentOS 下 maven 安装
查看>>
质量保障
查看>>
mac 火狐 下载 任何文件都是失败
查看>>
Run Shell Commands in Python
查看>>
数组与泛型(2)
查看>>
20145322 Exp5 Adobe阅读器漏洞攻击
查看>>
使用System.out.print/prilntln() 输出时存在的问题
查看>>
angular-messages.js信息验证的使用
查看>>
HDU ACM 2844 Coins (多重背包)----------------01背包,完全背包,多重背包模板
查看>>
Docker 命令大全
查看>>
Linux c 根据socket套接字获取当前监听的端口
查看>>
scala 16 包
查看>>
黑马程序员------oc中的基本框架Foundation
查看>>
springboot集成schedule(深度理解)
查看>>
人工智能学习 第一课
查看>>
AT3576 Popping Balls
查看>>
CF1088F Ehab and a weird weight formula
查看>>