|
|
|
@ -1,151 +0,0 @@ |
|
|
|
|
using System; |
|
|
|
|
using System.Collections.Generic; |
|
|
|
|
using System.IO; |
|
|
|
|
using System.Linq; |
|
|
|
|
using SqlSugar; |
|
|
|
|
|
|
|
|
|
namespace Tiobon.Core.Common.DB.Dapper.DBManager; |
|
|
|
|
public class BaseDBConfig |
|
|
|
|
{ |
|
|
|
|
/* 之前的单库操作已经删除,如果想要之前的代码,可以查看我的GitHub的历史记录 |
|
|
|
|
* 目前是多库操作,默认加载的是AppSetting.json设置为true的第一个db连接。 |
|
|
|
|
*/ |
|
|
|
|
public static (List<MutiDBOperate> allDbs, List<MutiDBOperate> slaveDbs) MutiConnectionString => MutiInitConn(); |
|
|
|
|
|
|
|
|
|
private static string DifDBConnOfSecurity(params string[] conn) |
|
|
|
|
{ |
|
|
|
|
foreach (var item in conn) |
|
|
|
|
{ |
|
|
|
|
try |
|
|
|
|
{ |
|
|
|
|
if (File.Exists(item)) |
|
|
|
|
{ |
|
|
|
|
return File.ReadAllText(item).Trim(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
catch (System.Exception) |
|
|
|
|
{ |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return conn[conn.Length - 1]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static (List<MutiDBOperate>, List<MutiDBOperate>) MutiInitConn() |
|
|
|
|
{ |
|
|
|
|
List<MutiDBOperate> listdatabase = AppSetting.app<MutiDBOperate>("DBS") |
|
|
|
|
.Where(i => i.Enabled).ToList(); |
|
|
|
|
foreach (var i in listdatabase) |
|
|
|
|
{ |
|
|
|
|
SpecialDbString(i); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
List<MutiDBOperate> listdatabaseSimpleDB = new List<MutiDBOperate>(); //单库 |
|
|
|
|
List<MutiDBOperate> listdatabaseSlaveDB = new List<MutiDBOperate>(); //从库 |
|
|
|
|
|
|
|
|
|
// 单库,且不开启读写分离,只保留一个 |
|
|
|
|
if (!AppSetting.app(new string[] { "CQRSEnabled" }).ObjToBool() && !AppSetting.app(new string[] { "MutiDBEnabled" }).ObjToBool()) |
|
|
|
|
{ |
|
|
|
|
if (listdatabase.Count == 1) |
|
|
|
|
{ |
|
|
|
|
return (listdatabase, listdatabaseSlaveDB); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
var dbFirst = listdatabase.FirstOrDefault(d => d.ConnId == AppSetting.app(new string[] { "MainDB" }).ObjToString()); |
|
|
|
|
if (dbFirst == null) |
|
|
|
|
{ |
|
|
|
|
dbFirst = listdatabase.FirstOrDefault(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
listdatabaseSimpleDB.Add(dbFirst); |
|
|
|
|
return (listdatabaseSimpleDB, listdatabaseSlaveDB); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 读写分离,且必须是单库模式,获取从库 |
|
|
|
|
if (AppSetting.app(new string[] { "CQRSEnabled" }).ObjToBool() && !AppSetting.app(new string[] { "MutiDBEnabled" }).ObjToBool()) |
|
|
|
|
{ |
|
|
|
|
if (listdatabase.Count > 1) |
|
|
|
|
{ |
|
|
|
|
listdatabaseSlaveDB = listdatabase.Where(d => d.ConnId != AppSetting.app(new string[] { "MainDB" }).ObjToString()).ToList(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return (listdatabase, listdatabaseSlaveDB); |
|
|
|
|
//} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// 定制Db字符串 |
|
|
|
|
/// 目的是保证安全:优先从本地txt文件获取,若没有文件则从AppSetting.json中获取 |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="mutiDBOperate"></param> |
|
|
|
|
/// <returns></returns> |
|
|
|
|
private static MutiDBOperate SpecialDbString(MutiDBOperate mutiDBOperate) |
|
|
|
|
{ |
|
|
|
|
if (mutiDBOperate.DbType == DataBaseType.Sqlite) |
|
|
|
|
{ |
|
|
|
|
mutiDBOperate.Connection = $"DataSource=" + Path.Combine(Environment.CurrentDirectory, mutiDBOperate.Connection); |
|
|
|
|
} |
|
|
|
|
else if (mutiDBOperate.DbType == DataBaseType.SqlServer) |
|
|
|
|
{ |
|
|
|
|
mutiDBOperate.Connection = DifDBConnOfSecurity(@"D:\my-file\dbCountPsw1_SqlserverConn.txt", mutiDBOperate.Connection); |
|
|
|
|
} |
|
|
|
|
else if (mutiDBOperate.DbType == DataBaseType.MySql) |
|
|
|
|
{ |
|
|
|
|
mutiDBOperate.Connection = DifDBConnOfSecurity(@"D:\my-file\dbCountPsw1_MySqlConn.txt", mutiDBOperate.Connection); |
|
|
|
|
} |
|
|
|
|
else if (mutiDBOperate.DbType == DataBaseType.Oracle) |
|
|
|
|
{ |
|
|
|
|
mutiDBOperate.Connection = DifDBConnOfSecurity(@"D:\my-file\dbCountPsw1_OracleConn.txt", mutiDBOperate.Connection); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return mutiDBOperate; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public enum DataBaseType |
|
|
|
|
{ |
|
|
|
|
MySql = 0, |
|
|
|
|
SqlServer = 1, |
|
|
|
|
Sqlite = 2, |
|
|
|
|
Oracle = 3, |
|
|
|
|
PostgreSQL = 4, |
|
|
|
|
Dm = 5, |
|
|
|
|
Kdbndp = 6, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public class MutiDBOperate |
|
|
|
|
{ |
|
|
|
|
/// <summary> |
|
|
|
|
/// 连接启用开关 |
|
|
|
|
/// </summary> |
|
|
|
|
public bool Enabled { get; set; } |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// 连接ID |
|
|
|
|
/// </summary> |
|
|
|
|
public string ConnId { get; set; } |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// 从库执行级别,越大越先执行 |
|
|
|
|
/// </summary> |
|
|
|
|
public int HitRate { get; set; } |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// 连接字符串 |
|
|
|
|
/// </summary> |
|
|
|
|
public string Connection { get; set; } |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// 数据库类型 |
|
|
|
|
/// </summary> |
|
|
|
|
public DataBaseType DbType { get; set; } |
|
|
|
|
} |