-
Notifications
You must be signed in to change notification settings - Fork 23
/
Copy pathscheduler.go
100 lines (73 loc) · 2.62 KB
/
scheduler.go
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
100
package chrono
import (
"time"
)
type TaskScheduler interface {
Schedule(task Task, options ...Option) (ScheduledTask, error)
ScheduleWithCron(task Task, expression string, options ...Option) (ScheduledTask, error)
ScheduleWithFixedDelay(task Task, delay time.Duration, options ...Option) (ScheduledTask, error)
ScheduleAtFixedRate(task Task, period time.Duration, options ...Option) (ScheduledTask, error)
IsShutdown() bool
Shutdown() chan bool
}
type SimpleTaskScheduler struct {
taskExecutor TaskExecutor
}
func NewSimpleTaskScheduler(executor TaskExecutor) *SimpleTaskScheduler {
if executor == nil {
executor = NewDefaultTaskExecutor()
}
scheduler := &SimpleTaskScheduler{
taskExecutor: executor,
}
return scheduler
}
func NewDefaultTaskScheduler() TaskScheduler {
return NewSimpleTaskScheduler(NewDefaultTaskExecutor())
}
func (scheduler *SimpleTaskScheduler) Schedule(task Task, options ...Option) (ScheduledTask, error) {
schedulerTask, err := CreateSchedulerTask(task, options...)
if err != nil {
return nil, err
}
return scheduler.taskExecutor.Schedule(task, schedulerTask.GetInitialDelay())
}
func (scheduler *SimpleTaskScheduler) ScheduleWithCron(task Task, expression string, options ...Option) (ScheduledTask, error) {
var schedulerTask *SchedulerTask
var err error
schedulerTask, err = CreateSchedulerTask(task, options...)
if err != nil {
return nil, err
}
var cronTrigger *CronTrigger
cronTrigger, err = CreateCronTrigger(expression, schedulerTask.location)
if err != nil {
return nil, err
}
var triggerTask *TriggerTask
triggerTask, err = CreateTriggerTask(schedulerTask.task, scheduler.taskExecutor, cronTrigger)
if err != nil {
return nil, err
}
return triggerTask.Schedule()
}
func (scheduler *SimpleTaskScheduler) ScheduleWithFixedDelay(task Task, delay time.Duration, options ...Option) (ScheduledTask, error) {
schedulerTask, err := CreateSchedulerTask(task, options...)
if err != nil {
return nil, err
}
return scheduler.taskExecutor.ScheduleWithFixedDelay(schedulerTask.task, schedulerTask.GetInitialDelay(), delay)
}
func (scheduler *SimpleTaskScheduler) ScheduleAtFixedRate(task Task, period time.Duration, options ...Option) (ScheduledTask, error) {
schedulerTask, err := CreateSchedulerTask(task, options...)
if err != nil {
return nil, err
}
return scheduler.taskExecutor.ScheduleAtFixedRate(schedulerTask.task, schedulerTask.GetInitialDelay(), period)
}
func (scheduler *SimpleTaskScheduler) IsShutdown() bool {
return scheduler.taskExecutor.IsShutdown()
}
func (scheduler *SimpleTaskScheduler) Shutdown() chan bool {
return scheduler.taskExecutor.Shutdown()
}