
外观
外观
本次升级主要实现日志数据库分离和升级滑块验证码插件,提升系统的并发处理能力、安全性和代码可维护性。
admindb
中分离,新增独立的 logdb
数据库,提升接口并发处理能力。dbconfig.json
dbs
节点下新增 logdb
数据库配置admindb
的 excludeEntityDbs
排除日志相关实体sys
项目的 ConfigCenter/dbconfig.json
配置示例:
{
"DbConfig": {
//数据库注册键
"key": "sysdb",
//程序集名称,自动获取实体表,为空则通过ConfigureFreeSql自定义配置
"assemblyNames": [ "MyCompanyName.MySys.Api" ],
//指定实体数据库列表,不填同步所有数据库表实体
"includeEntityDbs": [],
//排除实体数据库列表,指定不同步数据库表实体
"excludeEntityDbs": [],
//监听所有操作
"monitorCommand": false,
//监听Curd操作
"curd": true,
//监听同步结构脚本
"syncStructureSql": false,
//监听同步数据Curd操作
"syncDataCurd": false,
//建库
"createDb": true,
//SqlServer,PostgreSQL,Oracle,OdbcOracle,OdbcSqlServer,OdbcMySql,OdbcPostgreSQL,Odbc,OdbcDameng,MsAccess
//建库连接字符串
//default_authentication_plugin = caching_sha2_password
//MySql "Server=localhost; Port=3306; Database=mysql; Uid=root; Pwd=pwd; Charset=utf8mb4;Min pool size=1;Allow User Variables=True"
//default_authentication_plugin = mysql_native_password
//MySql "Server=localhost; Port=3306; Database=mysql; Uid=root; Pwd=pwd; Charset=utf8mb4;SslMode=none;Min pool size=1;Allow User Variables=True"
//SqlServer "Data Source=.;Integrated Security=True;Initial Catalog=master;Encrypt=True;TrustServerCertificate=True;Pooling=true;Min Pool Size=1"
//PostgreSQL "Host=localhost;Port=5432;Username=postgres;Password=; Database=postgres;Pooling=true;Minimum Pool Size=1"
//Oracle "user id=SYS;password=pwd; data source=//127.0.0.1:1521/XE;Pooling=true;Min Pool Size=1"
"createDbConnectionString": "",
//建库脚本,复杂建库脚本可放到createdbsql.txt中
//MySql "CREATE DATABASE `sysdb` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci'"
//SqlServer "CREATE DATABASE [sysdb]"
//PostgreSQL "CREATE DATABASE \"sysdb\" WITH ENCODING = 'UTF8'"
"createDbSql": "",
//同步结构
"syncStructure": true,
//同步结构批次实体数
"syncStructureEntityBatchSize": 1,
//同步数据分批处理大小,默认每次处理500条,过大可能会导致内存溢出
"syncDataBatchSize": 500,
//同步数据
"syncData": true,
//注意生产环境谨慎开启,确定要修改表数据是最新数据再开启。
//如不想更新某些表的数据,可以先配置同步数据排除表syncDataExcludeTables,再执行数据更新操作
//同步更新数据
"syncUpdateData": false,
////同步数据地址
"SyncDataPath": "InitData/App",
//同步数据包含表,指定表同步,不填同步所有表
"syncDataIncludeTables": [],
//同步数据排除表,指定表不同步
"syncDataExcludeTables": [],
//同步数据操作用户
"syncDataUser": {
"id": 161223411986501,
"userName": "admin",
"name": "管理员",
"tenantId": 161223412138053
},
//项目初始化不开启生成数据,发布生产环境前,如果开发环境有配置数据需要更新数据包,可以开启生成数据包,使用完记得关闭
//开启生成数据前先关闭syncStructure syncData createDb
//生成数据
"generateData": false,
//数据库配置 https://github.com/dotnetcore/FreeSql/wiki/入门
//连接字符串语法 https://www.connectionstrings.com
//数据库类型 MySql = 0, SqlServer = 1, PostgreSQL = 2, Oracle = 3, Sqlite = 4, OdbcOracle = 5, OdbcSqlServer = 6, OdbcMySql = 7, OdbcPostgreSQL = 8, Odbc = 9, OdbcDameng = 10, MsAccess = 11, Dameng = 12, OdbcKingbaseES = 13, ShenTong = 14, KingbaseES = 15, Firebird = 16
"type": "Sqlite",
//连接字符串
//default_authentication_plugin = caching_sha2_password
//MySql "Server=localhost; Port=3306; Database=sysdb; Uid=root; Pwd=pwd; Charset=utf8mb4;Min pool size=1;Allow User Variables=True"
//default_authentication_plugin = mysql_native_password
//MySql "Server=localhost; Port=3306; Database=sysdb; Uid=root; Pwd=pwd; Charset=utf8mb4;SslMode=none;Min pool size=1;Allow User Variables=True"
//SqlServer "Data Source=.;Integrated Security=True;Initial Catalog=sysdb;Encrypt=True;TrustServerCertificate=True;Pooling=true;Min Pool Size=1"
//PostgreSQL "Host=localhost;Port=5432;Username=postgres;Password=; Database=sysdb;Pooling=true;Minimum Pool Size=1"
//Sqlite "Data Source=|DataDirectory|\\sysdb.db; Pooling=true;Min Pool Size=1"
//"Oracle" "user id=SYS;password=pwd; data source=//127.0.0.1:1521/XE;Pooling=true;Min Pool Size=1",
"connectionString": "Data Source=|DataDirectory|\\sysdb.db; Pooling=true;Min Pool Size=1",
//指定程序集
//FreeSql.MySql.MySqlProvider`1,FreeSql.Provider.MySqlConnector
"providerType": "",
//读写分离从库列表
"slaveList": [
//{
// //权重
// "Weight": 1,
// //连接字符串
// "ConnectionString": "Data Source=|DataDirectory|\\sysdb.db; Pooling=true;Min Pool Size=1"
//}
],
//空闲时间(分),设置idleTime=0则不自动回收, 设置1天不使用则自动回收
"idleTime": 1440,
//新增时强制更新EntityUpdate数据
"forceUpdate": false,
//多数据库
//Core/Consts定义DbKeys枚举
//使用仓储访问 public ModuleRepository(UnitOfWorkManagerCloud muowm) : base(DbKeys.sysdb, muowm)
//使用FreeSqlCloud访问 freeSqlCloud.Use(DbKeys.sysdb);
"dbs": [
{
//权限库
"key": "admindb",
//程序集名称,自动获取实体表
"assemblyNames": [ "ZhonTai.Admin" ],
//指定实体数据库列表,不填同步所有数据库表实体
"includeEntityDbs": [],
//排除实体数据库列表,指定不同步数据库表实体
"excludeEntityDbs": [ "Log" ],
//监听所有操作
"monitorCommand": false,
//监听Curd操作
"curd": true,
//监听同步结构脚本
"syncStructureSql": false,
//监听同步数据Curd操作
"syncDataCurd": false,
//建库
"createDb": true,
//SqlServer,PostgreSQL,Oracle,OdbcOracle,OdbcSqlServer,OdbcMySql,OdbcPostgreSQL,Odbc,OdbcDameng,MsAccess
//建库连接字符串
//default_authentication_plugin = caching_sha2_password
//MySql "Server=localhost; Port=3306; Database=mysql; Uid=root; Pwd=pwd; Charset=utf8mb4;Min pool size=1;Allow User Variables=True"
//default_authentication_plugin = mysql_native_password
//MySql "Server=localhost; Port=3306; Database=mysql; Uid=root; Pwd=pwd; Charset=utf8mb4;SslMode=none;Min pool size=1;Allow User Variables=True"
//SqlServer "Data Source=.;User Id=sa;Password=pwd;Initial Catalog=master;TrustServerCertificate=true;Pooling=true;Min Pool Size=1"
//PostgreSQL "Host=localhost;Port=5432;Username=postgres;Password=; Database=postgres;Pooling=true;Minimum Pool Size=1"
//Oracle "user id=SYS;password=pwd; data source=127.0.0.1:1521/XE;Pooling=true;Min Pool Size=1"
"createDbConnectionString": "",
//建库脚本,复杂建库脚本可放到createdbsql.txt中
//MySql "CREATE DATABASE `admindb` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci'"
//SqlServer "CREATE DATABASE [admindb]"
//PostgreSQL "CREATE DATABASE \"admindb\" WITH ENCODING = 'UTF8'"
"createDbSql": "",
//同步结构
"syncStructure": true,
//同步结构批次实体数
"syncStructureEntityBatchSize": 1,
//同步数据分批处理大小,默认每次处理500条,过大可能会导致内存溢出
"syncDataBatchSize": 500,
//同步数据
"syncData": true,
//同步更新数据,注意生产环境谨慎开启,确定要修改表数据是最新数据再开启。如不想更新某些表的数据,可以先配置同步数据排除表syncDataExcludeTables,再执行数据更新操作
"syncUpdateData": false,
//同步数据地址
"SyncDataPath": "InitData/App",
//同步所有表["base_dict_type", "base_dict", "base_user", "base_user_staff", "base_org", "base_role", "base_api", "base_view", "base_permission", "base_permission_api", "base_user_role", "base_user_org", "base_role_permission", "base_tenant", "base_tenant_permission"]
//同步指定表["base_api", "base_view", "base_permission", "base_permission_api"]
//同步数据包含表,指定表同步,不填同步所有表
"syncDataIncludeTables": [],
//同步排除表["base_user"]
//同步数据排除表,指定表不同步
"syncDataExcludeTables": [],
//同步数据操作用户
"syncDataUser": {
"id": 161223411986501,
"userName": "admin",
"name": "管理员",
"tenantId": 161223412138053
},
//项目初始化不开启生成数据,发布生产环境前,如果开发环境有配置数据需要更新数据包,可以开启生成数据包,使用完记得关闭
//开启生成数据前先关闭syncStructure syncData createDb
//生成数据
"generateData": false,
//数据库配置 https:github.com/dotnetcore/FreeSql/wiki/入门
//连接字符串语法 https:www.connectionstrings.com
//数据库类型 MySql = 0, SqlServer = 1, PostgreSQL = 2, Oracle = 3, Sqlite = 4, OdbcOracle = 5, OdbcSqlServer = 6, OdbcMySql = 7, OdbcPostgreSQL = 8, Odbc = 9, OdbcDameng = 10, MsAccess = 11, Dameng = 12, OdbcKingbaseES = 13, ShenTong = 14, KingbaseES = 15, Firebird = 16
"type": "Sqlite",
//连接字符串
//default_authentication_plugin = caching_sha2_password
//MySql "Server=localhost; Port=3306; Database=admindb; Uid=root; Pwd=pwd; Charset=utf8mb4;Min pool size=1;Allow User Variables=True"
//default_authentication_plugin = mysql_native_password
//MySql "Server=localhost; Port=3306; Database=admindb; Uid=root; Pwd=pwd; Charset=utf8mb4;SslMode=none;Min pool size=1;Allow User Variables=True"
//SqlServer "Data Source=.;Integrated Security=True;Initial Catalog=admindb;Pooling=true;Min Pool Size=1"
//PostgreSQL "Host=localhost;Port=5432;Username=postgres;Password=; Database=admindb;Pooling=true;Minimum Pool Size=1"
//Sqlite "Data Source=|DataDirectory|\\admindb.db; Pooling=true;Min Pool Size=1"
//"Oracle" "user id=SYS;password=pwd; data source=127.0.0.1:1521/XE;Pooling=true;Min Pool Size=1",
"connectionString": "Data Source=|DataDirectory|\\admindb.db; Pooling=true;Min Pool Size=1",
//指定程序集
//FreeSql.MySql.MySqlProvider`1,FreeSql.Provider.MySqlConnector
"providerType": "",
//读写分离从库列表
"slaveList": [
//{
// 权重
// "Weight": 1,
// 连接字符串
// "ConnectionString": "Data Source=|DataDirectory|\\admindb.db; Pooling=true;Min Pool Size=1"
//}
]
},
{
//日志库
"key": "logdb",
//程序集名称,自动获取实体表
"assemblyNames": [ "ZhonTai.Admin" ],
//指定实体数据库列表,不填同步所有数据库表实体
"includeEntityDbs": [ "Log" ],
//排除实体数据库列表,指定不同步数据库表实体
"excludeEntityDbs": [],
//监听所有操作
"monitorCommand": false,
//监听Curd操作
"curd": true,
//监听同步结构脚本
"syncStructureSql": false,
//监听同步数据Curd操作
"syncDataCurd": false,
//建库
"createDb": true,
//SqlServer,PostgreSQL,Oracle,OdbcOracle,OdbcSqlServer,OdbcMySql,OdbcPostgreSQL,Odbc,OdbcDameng,MsAccess
//建库连接字符串
//default_authentication_plugin = caching_sha2_password
//MySql "Server=localhost; Port=3306; Database=mysql; Uid=root; Pwd=pwd; Charset=utf8mb4;Min pool size=1;Allow User Variables=True"
//default_authentication_plugin = mysql_native_password
//MySql "Server=localhost; Port=3306; Database=mysql; Uid=root; Pwd=pwd; Charset=utf8mb4;SslMode=none;Min pool size=1;Allow User Variables=True"
//SqlServer "Data Source=.;User Id=sa;Password=pwd;Initial Catalog=master;TrustServerCertificate=true;Pooling=true;Min Pool Size=1"
//PostgreSQL "Host=localhost;Port=5432;Username=postgres;Password=; Database=postgres;Pooling=true;Minimum Pool Size=1"
//Oracle "user id=SYS;password=pwd; data source=127.0.0.1:1521/XE;Pooling=true;Min Pool Size=1"
"createDbConnectionString": "",
//建库脚本,复杂建库脚本可放到createdbsql.txt中
//MySql "CREATE DATABASE `logdb` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci'"
//SqlServer "CREATE DATABASE [logdb]"
//PostgreSQL "CREATE DATABASE \"logdb\" WITH ENCODING = 'UTF8'"
"createDbSql": "",
//同步结构
"syncStructure": true,
//同步结构批次实体数
"syncStructureEntityBatchSize": 1,
//同步数据分批处理大小,默认每次处理500条,过大可能会导致内存溢出
"syncDataBatchSize": 500,
//同步数据
"syncData": false,
//同步更新数据,注意生产环境谨慎开启,确定要修改表数据是最新数据再开启。如不想更新某些表的数据,可以先配置同步数据排除表syncDataExcludeTables,再执行数据更新操作
"syncUpdateData": false,
//项目初始化不开启生成数据,发布生产环境前,如果开发环境有配置数据需要更新数据包,可以开启生成数据包,使用完记得关闭
//开启生成数据前先关闭syncStructure syncData createDb
//生成数据
"generateData": false,
//数据库配置 https:github.com/dotnetcore/FreeSql/wiki/入门
//连接字符串语法 https:www.connectionstrings.com
//数据库类型 MySql = 0, SqlServer = 1, PostgreSQL = 2, Oracle = 3, Sqlite = 4, OdbcOracle = 5, OdbcSqlServer = 6, OdbcMySql = 7, OdbcPostgreSQL = 8, Odbc = 9, OdbcDameng = 10, MsAccess = 11, Dameng = 12, OdbcKingbaseES = 13, ShenTong = 14, KingbaseES = 15, Firebird = 16
"type": "Sqlite",
//连接字符串
//MySql "Server=localhost; Port=3306; Database=logdb; Uid=root; Pwd=pwd; Charset=utf8mb4;Min pool size=1;Allow User Variables=True"
//default_authentication_plugin = mysql_native_password
//MySql "Server=localhost; Port=3306; Database=logdb; Uid=root; Pwd=pwd; Charset=utf8mb4;SslMode=none;Min pool size=1;Allow User Variables=True"
//SqlServer "Data Source=.;Integrated Security=True;Initial Catalog=logdb;Pooling=true;Min Pool Size=1"
//PostgreSQL "Host=localhost;Port=5432;Username=postgres;Password=; Database=logdb;Pooling=true;Minimum Pool Size=1"
//Sqlite "Data Source=|DataDirectory|\\logdb.db; Pooling=true;Min Pool Size=1"
//"Oracle" "user id=SYS;password=pwd; data source=127.0.0.1:1521/XE;Pooling=true;Min Pool Size=1",
"connectionString": "Data Source=|DataDirectory|\\logdb.db; Pooling=true;Min Pool Size=1",
//指定程序集
//FreeSql.MySql.MySqlProvider`1,FreeSql.Provider.MySqlConnector
"providerType": "",
//读写分离从库列表
"slaveList": [
//{
// 权重
// "Weight": 1,
// 连接字符串
// "ConnectionString": "Data Source=|DataDirectory|\\admindb.db; Pooling=true;Min Pool Size=1"
//}
]
}
]
}
}
说明
logdb可配置为独立数据库,也可配置到应用库中,建议配置为独立数据库,避免应用库数据量过大。
Program.cs
ConfigurePreFreeSql = (freeSql, dbConfig) =>
{
freeSql.UseLogDb(dbConfig); // 新增:使用独立日志数据库
}
Program.cs
ConfigurePostServices = context =>
{
// 新增滑块验证服务(已内置在ZhonTai.Admin.Contracts中)
context.Services.AddSlideCaptcha();
}
Program.cs
ConfigureAutofacContainer = (builder, context) =>
{
builder.RegisterGeneric(typeof(AppRepositoryBase<>)).InstancePerLifetimeScope();
builder.RegisterGeneric(typeof(AdminRepositoryBase<>)).InstancePerLifetimeScope();
builder.RegisterGeneric(typeof(LogRepositoryBase<>)).InstancePerLifetimeScope();
}