如何使用AspNetCore.HealthChecks.SqlServer检测多个SQL Server数据库健康状态
多SQL Server数据库健康检测实现方案(.NET Core 3.1环境)
核心实现逻辑很简单:直接链式调用多次AddSqlServer方法即可,注意每个注册的健康检测项必须使用唯一的name参数,否则后注册的项会覆盖之前的注册项。
固定多库注册示例
如果你的数据库连接串是固定已知的,直接按如下格式链式添加即可,示例中配置文件里预设了3个连接串:DefaultConnection、OrderDbConnection、UserDbConnection:
services.AddHealthChecks() // 第一个数据库:默认业务库 .AddSqlServer( connectionString: Configuration.GetConnectionString("DefaultConnection"), healthQuery: "SELECT 1;", name: "sql_default", failureStatus: HealthStatus.Degraded, tags: new string[] { "db", "sql", "sqlserver" } ) // 第二个数据库:订单库 .AddSqlServer( connectionString: Configuration.GetConnectionString("OrderDbConnection"), healthQuery: "SELECT 1;", name: "sql_order", failureStatus: HealthStatus.Degraded, tags: new string[] { "db", "sql", "sqlserver", "order" } ) // 第三个数据库:用户库 .AddSqlServer( connectionString: Configuration.GetConnectionString("UserDbConnection"), healthQuery: "SELECT 1;", name: "sql_user", failureStatus: HealthStatus.Degraded, tags: new string[] { "db", "sql", "sqlserver", "user" } );
动态批量注册示例
如果你的配置文件里有大量数据库连接串,不想逐个手写,可以遍历配置的ConnectionStrings节点批量注册:
// 读取配置中所有数据库连接串 var connectionStringNodes = Configuration.GetSection("ConnectionStrings").GetChildren(); var healthCheckBuilder = services.AddHealthChecks(); foreach (var connItem in connectionStringNodes) { healthCheckBuilder.AddSqlServer( connectionString: connItem.Value, healthQuery: "SELECT 1;", name: $"sql_{connItem.Key.ToLower()}", failureStatus: HealthStatus.Degraded, tags: new string[] { "db", "sql", "sqlserver", connItem.Key.ToLower() } ); }
注意事项
- 每个
AddSqlServer的name参数必须唯一,这是健康检测项的唯一标识 - 你可以为不同数据库配置自定义的
healthQuery,比如检测指定表是否存在、核心业务数据是否正常等 - 不同库可以配置不同的tag,后续可以通过tag过滤,只查询某一类数据库的健康状态
- 3.1.1版本的
AspNetCore.HealthChecks.SqlServer完全支持上述写法,无需额外适配
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

