AssetManager.API/AssetManager.Data/SqlSugarConfig.cs
OpenClaw Agent 51b7372d81 fix: 优化 MySQL 连接池配置
问题:Cannot Open when State is Connecting

分析:
- SqlSugarScope 是线程安全的,使用 AsyncLocal 隔离上下文
- Singleton 注册符合官方建议
- 问题可能出在 MySQL 连接池配置

修复:
添加连接池参数:
- Pooling=true(开启连接池)
- MaximumPoolSize=100(最大连接数)
- MinimumPoolSize=5(最小连接数)
- ConnectionTimeout=30(连接超时)
- ConnectionIdleTimeout=180(空闲连接超时,避免使用陈旧连接)

配合内存缓存层,减少数据库查询次数
2026-03-24 10:08:35 +00:00

74 lines
2.6 KiB
C#
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using SqlSugar;
using Microsoft.Extensions.Configuration;
namespace AssetManager.Data;
public static class SqlSugarConfig
{
private static IConfiguration? _configuration;
/// <summary>
/// 初始化配置在Program.cs中调用
/// </summary>
public static void Initialize(IConfiguration configuration)
{
_configuration = configuration;
}
public static ISqlSugarClient GetSqlSugarClient()
{
if (_configuration == null)
{
throw new InvalidOperationException("SqlSugarConfig has not been initialized. Call Initialize() first.");
}
// 优先从环境变量读取连接字符串
var connectionString = Environment.GetEnvironmentVariable("ConnectionStrings__Default")
?? _configuration.GetConnectionString("Default")
?? throw new InvalidOperationException("Connection string 'Default' not found in environment variables or configuration.");
// MySQL 连接池优化配置
// 添加连接池参数提高稳定性
if (!connectionString.Contains("Pooling=", StringComparison.OrdinalIgnoreCase))
{
connectionString += ";Pooling=true";
}
if (!connectionString.Contains("MaximumPoolSize=", StringComparison.OrdinalIgnoreCase))
{
connectionString += ";MaximumPoolSize=100";
}
if (!connectionString.Contains("MinimumPoolSize=", StringComparison.OrdinalIgnoreCase))
{
connectionString += ";MinimumPoolSize=5";
}
// 连接超时和生命周期
if (!connectionString.Contains("ConnectionTimeout=", StringComparison.OrdinalIgnoreCase))
{
connectionString += ";ConnectionTimeout=30";
}
// 连接空闲超时,避免使用长时间空闲的连接
if (!connectionString.Contains("ConnectionIdleTimeout=", StringComparison.OrdinalIgnoreCase))
{
connectionString += ";ConnectionIdleTimeout=180";
}
return new SqlSugarScope(new ConnectionConfig()
{
ConnectionString = connectionString,
DbType = DbType.MySql,
IsAutoCloseConnection = true,
InitKeyType = InitKeyType.Attribute,
ConfigureExternalServices = new ConfigureExternalServices
{
EntityService = (property, column) =>
{
if (property.PropertyType == typeof(DateTime))
{
column.DataType = "datetime(3)";
}
}
}
});
}
}