-
Notifications
You must be signed in to change notification settings - Fork 1.3k
/
Copy pathJobBase.cs
99 lines (87 loc) · 2.6 KB
/
JobBase.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
using Util.Helpers;
namespace Util.Scheduling;
/// <summary>
/// 任务
/// </summary>
public abstract class JobBase : IJob, Quartz.IJob {
/// <summary>
/// 参数键名
/// </summary>
public const string DataKey = "Util_Job_Data";
/// <summary>
/// 任务信息
/// </summary>
private IJobDetail _jobDetail;
/// <summary>
/// 触发器
/// </summary>
private ITrigger _trigger;
/// <summary>
/// 参数
/// </summary>
public object Data { get; set; }
/// <summary>
/// 配置
/// </summary>
public void Config() {
var jobInfo = new QuartzJobInfo();
var trigger = new QuartzTrigger();
ConfigDetail( jobInfo );
ConfigTrigger( trigger );
_jobDetail = CreateJobDetail( jobInfo );
_trigger = trigger.ToTrigger();
Config( _jobDetail, _trigger );
}
/// <summary>
/// 配置任务信息
/// </summary>
protected virtual void ConfigDetail( IJobInfo job ) {
}
/// <summary>
/// 配置触发器
/// </summary>
protected virtual void ConfigTrigger( IJobTrigger trigger ) {
}
/// <summary>
/// 创建任务信息
/// </summary>
private IJobDetail CreateJobDetail( IJobInfo job ) {
var builder = JobBuilder.Create( GetType() )
.WithIdentity( job.GetName(), job.GetGroup() );
if ( Data != null )
builder.UsingJobData( DataKey, Util.Helpers.Json.ToJson( Data ) );
return builder.Build();
}
/// <summary>
/// 配置任务
/// </summary>
/// <param name="jobDetail">任务信息</param>
/// <param name="trigger">任务触发器</param>
protected virtual void Config( IJobDetail jobDetail, ITrigger trigger ) {
}
/// <summary>
/// 执行任务
/// </summary>
/// <param name="context">执行上下文</param>
public async Task Execute( IJobExecutionContext context ) {
using var scope = Ioc.ServiceScopeFactory.CreateScope();
await Execute( new QuartzExecutionContext( scope.ServiceProvider, context ) );
}
/// <summary>
/// 执行任务
/// </summary>
/// <param name="context">执行上下文</param>
protected abstract Task Execute( QuartzExecutionContext context );
/// <summary>
/// 获取任务信息
/// </summary>
public IJobDetail GetJobDetail() {
return _jobDetail;
}
/// <summary>
/// 获取触发器
/// </summary>
public ITrigger GetTrigger() {
return _trigger;
}
}