跳到主要内容
版本:3.0.0

SqlServer 任务存储扩展(Aegis.Jobs.SqlServer)

Aegis.Jobs.SqlServerAegis.Jobs 的 SQL Server 存储扩展包。它用于把任务数据落到 SQL Server,但当前 3.x 更推荐优先使用 Aegis.Jobs.Postgres 作为标准持久化方案。

组件概览

字段说明
组件名称SqlServer 任务存储扩展
真实类库Aegis.Jobs.SqlServer
组件定位Aegis.Jobs 的 SQL Server 存储扩展
引入方式安装 NuGet,并在项目代码中手动注册存储相关服务
是否需要 Component.deps.json需要先启用 Jobs,当前扩展本身按代码注册
核心能力SqlServerConnectionSqlServerStorageAegisJobDb
典型配套Aegis.JobsAegis.Core.FreeSql

什么时候要用它

适合场景:

  • 项目必须沿用 SQL Server 做任务持久化
  • 当前环境不方便引入 PostgreSQL
  • 你接受这条链路按代码注册,而不是直接走组件声明

如果没有强制的 SQL Server 约束,默认还是优先使用 Postgres 任务存储扩展

最小可运行路径

第一步:先启用 Jobs

{
"Components": {
"Services": [
"Jobs"
],
"Middlewares": []
}
}

第二步:准备配置

{
"ServerSettings": {
"ServerId": "1"
},
"SqlConnection": "Server=127.0.0.1;Database=AegisJobs;User Id=sa;Password=YourPassword;TrustServerCertificate=true"
}

第三步:在服务注册阶段手动接入存储

var connectionString = ConfigManager.Get("SqlConnection");

services.AddDbSource<Aegis.Jobs.SqlServer.AegisJobDb>(options =>
{
options.ConnectionString = connectionString;
options.DataType = "SqlServer";
}, null, new EventHandler<ConfigEntityPropertyEventArgs>[0]);

services.AddSingleton<IPersistenceConnection, SqlServerConnection>();

services.AddSingleton<JobStorage, SqlServerStorage>(sp =>
{
var conn = sp.GetRequiredService<IPersistenceConnection>();
var storage = new SqlServerStorage(conn);
JobStorage.Current = storage;
return storage;
});

第四步:像普通任务一样调度

var jobId = AegisJob.Schedule<TestJob>(
x => x.Test(2),
TimeSpan.FromSeconds(1));

这条链路要注意什么

  • 基础调度能力还是来自 Aegis.Jobs
  • SQL Server 扩展主要负责补存储
  • 当前更适合作为特定数据库环境下的接入方案,而不是默认推荐路线

接入后怎么确认已经生效

可以用下面几种方式确认:

  • 应用启动时没有任务存储初始化异常
  • 调度任务后能返回任务编号
  • SQL Server 中可以看到任务数据落库

常见问题

为什么这里不是直接写 Jobs.SqlServer

当前文档口径里,SQL Server 扩展按手动代码注册说明,更适合明确控制数据库接入过程。

生产环境优先推荐哪条路线

默认优先 Postgres 任务存储扩展
只有在数据库环境明确要求 SQL Server 时,再考虑当前方案。

配套阅读