SqlServer 任务存储扩展(Aegis.Jobs.SqlServer)
Aegis.Jobs.SqlServer 是 Aegis.Jobs 的 SQL Server 存储扩展包。它用于把任务数据落到 SQL Server,但当前 3.x 更推荐优先使用 Aegis.Jobs.Postgres 作为标准持久化方案。
组件概览
| 字段 | 说明 |
|---|---|
| 组件名称 | SqlServer 任务存储扩展 |
| 真实类库 | Aegis.Jobs.SqlServer |
| 组件定位 | Aegis.Jobs 的 SQL Server 存储扩展 |
| 引入方式 | 安装 NuGet,并在项目代码中手动注册存储相关服务 |
是否需要 Component.deps.json | 需要先启用 Jobs,当前扩展本身按代码注册 |
| 核心能力 | SqlServerConnection、SqlServerStorage、AegisJobDb |
| 典型配套 | Aegis.Jobs、Aegis.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 时,再考虑当前方案。