Skip to content
推广您的产品

升级说明

v9.1.3

本次升级主要实现日志数据库分离升级滑块验证码插件,提升系统的并发处理能力、安全性和代码可维护性。

1. 数据库配置调整

  • 变更类型:功能增强
  • 说明:将日志数据库从原有的 admindb 中分离,新增独立的 logdb 数据库,提升接口并发处理能力。
  • 相关文件dbconfig.json
  • 配置变更
    • dbs 节点下新增 logdb 数据库配置
    • 调整 admindbexcludeEntityDbs 排除日志相关实体

sys项目的 ConfigCenter/dbconfig.json 配置示例:

dbconfig.json
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可配置为独立数据库,也可配置到应用库中,建议配置为独立数据库,避免应用库数据量过大。

2. 日志数据库初始化

  • 变更类型:新增功能
  • 说明:在程序启动时自动初始化日志数据库,确保日志数据独立存储。
  • 相关文件Program.cs
  • 代码变更
    csharp
    ConfigurePreFreeSql = (freeSql, dbConfig) =>
    {
        freeSql.UseLogDb(dbConfig); // 新增:使用独立日志数据库
    }

3. 滑块验证码功能集成

  • 变更类型:新增功能
  • 说明:集成滑块验证码功能(已包含在 ZhonTai.Admin.Contracts 库中),无需额外引用插件,增强系统安全性。
  • 相关文件Program.cs
  • 代码变更
    csharp
    ConfigurePostServices = context =>
    {
        // 新增滑块验证服务(已内置在ZhonTai.Admin.Contracts中)
        context.Services.AddSlideCaptcha();
    }

4. 多仓储泛型注入支持

  • 变更类型:功能增强
  • 说明:支持自动注入应用库、权限库、日志库的基础仓储, 根据基础仓储可快速构建实体仓储。
  • 相关文件Program.cs
  • 代码变更
    csharp
    ConfigureAutofacContainer = (builder, context) =>
    {
        builder.RegisterGeneric(typeof(AppRepositoryBase<>)).InstancePerLifetimeScope();
        builder.RegisterGeneric(typeof(AdminRepositoryBase<>)).InstancePerLifetimeScope();
        builder.RegisterGeneric(typeof(LogRepositoryBase<>)).InstancePerLifetimeScope();
    }