Skip to content

Commit 54fe002

Browse files
committed
feat(scheduler)!: rework constructor to use configuration options
1 parent 6226674 commit 54fe002

File tree

15 files changed

+543
-607
lines changed

15 files changed

+543
-607
lines changed

README.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ A minimalistic and zero-dependency scheduling library for Go.
99

1010
## About
1111

12-
Inspired by the [Quartz](https://github.com/quartz-scheduler/quartz) Java scheduler.
12+
The implementation is inspired by the design of the [Quartz](https://github.com/quartz-scheduler/quartz)
13+
Java scheduler.
1314

1415
### Library building blocks
1516

@@ -25,7 +26,7 @@ type Scheduler interface {
2526
// IsStarted determines whether the scheduler has been started.
2627
IsStarted() bool
2728

28-
// ScheduleJob schedules a job using a specified trigger.
29+
// ScheduleJob schedules a job using the provided Trigger.
2930
ScheduleJob(jobDetail *JobDetail, trigger Trigger) error
3031

3132
// GetJobKeys returns the keys of scheduled jobs.
@@ -150,7 +151,7 @@ func main() {
150151
defer cancel()
151152

152153
// create scheduler
153-
sched := quartz.NewStdScheduler()
154+
sched, _ := quartz.NewStdScheduler()
154155

155156
// async start scheduler
156157
sched.Start(ctx)
@@ -165,11 +166,11 @@ func main() {
165166
functionJob := job.NewFunctionJob(func(_ context.Context) (int, error) { return 42, nil })
166167

167168
// register jobs to scheduler
168-
sched.ScheduleJob(quartz.NewJobDetail(shellJob, quartz.NewJobKey("shellJob")),
169+
_ = sched.ScheduleJob(quartz.NewJobDetail(shellJob, quartz.NewJobKey("shellJob")),
169170
cronTrigger)
170-
sched.ScheduleJob(quartz.NewJobDetail(curlJob, quartz.NewJobKey("curlJob")),
171+
_ = sched.ScheduleJob(quartz.NewJobDetail(curlJob, quartz.NewJobKey("curlJob")),
171172
quartz.NewSimpleTrigger(time.Second*7))
172-
sched.ScheduleJob(quartz.NewJobDetail(functionJob, quartz.NewJobKey("functionJob")),
173+
_ = sched.ScheduleJob(quartz.NewJobDetail(functionJob, quartz.NewJobKey("functionJob")),
173174
quartz.NewSimpleTrigger(time.Second*5))
174175

175176
// stop scheduler

examples/main.go

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package main
33
import (
44
"context"
55
"fmt"
6+
"log"
67
"net/http"
78
"os"
89
"os/signal"
@@ -11,6 +12,7 @@ import (
1112
"time"
1213

1314
"github.com/reugn/go-quartz/job"
15+
"github.com/reugn/go-quartz/logger"
1416
"github.com/reugn/go-quartz/quartz"
1517
)
1618

@@ -24,19 +26,26 @@ func main() {
2426
cancel()
2527
}()
2628

27-
wg := new(sync.WaitGroup)
29+
var wg sync.WaitGroup
2830
wg.Add(2)
2931

30-
go sampleJobs(ctx, wg)
31-
go sampleScheduler(ctx, wg)
32+
go sampleJobs(ctx, &wg)
33+
go sampleScheduler(ctx, &wg)
3234

3335
wg.Wait()
3436
}
3537

3638
func sampleScheduler(ctx context.Context, wg *sync.WaitGroup) {
3739
defer wg.Done()
3840

39-
sched := quartz.NewStdScheduler()
41+
stdLogger := log.New(os.Stdout, "", log.LstdFlags|log.Lmsgprefix|log.Lshortfile)
42+
l := logger.NewSimpleLogger(stdLogger, logger.LevelInfo)
43+
sched, err := quartz.NewStdScheduler(quartz.WithLogger(l))
44+
if err != nil {
45+
fmt.Println(err)
46+
return
47+
}
48+
4049
cronTrigger, err := quartz.NewCronTrigger("1/3 * * * * *")
4150
if err != nil {
4251
fmt.Println(err)
@@ -50,13 +59,13 @@ func sampleScheduler(ctx context.Context, wg *sync.WaitGroup) {
5059
jobDetail1 := quartz.NewJobDetail(&PrintJob{"First job"}, quartz.NewJobKey("job1"))
5160
jobDetail2 := quartz.NewJobDetail(&PrintJob{"Second job"}, quartz.NewJobKey("job2"))
5261
jobDetail3 := quartz.NewJobDetail(&PrintJob{"Third job"}, quartz.NewJobKey("job3"))
53-
_ = sched.ScheduleJob(runOnceJobDetail, quartz.NewRunOnceTrigger(time.Second*5))
54-
_ = sched.ScheduleJob(jobDetail1, quartz.NewSimpleTrigger(time.Second*12))
55-
_ = sched.ScheduleJob(jobDetail2, quartz.NewSimpleTrigger(time.Second*6))
56-
_ = sched.ScheduleJob(jobDetail3, quartz.NewSimpleTrigger(time.Second*3))
62+
_ = sched.ScheduleJob(runOnceJobDetail, quartz.NewRunOnceTrigger(5*time.Second))
63+
_ = sched.ScheduleJob(jobDetail1, quartz.NewSimpleTrigger(12*time.Second))
64+
_ = sched.ScheduleJob(jobDetail2, quartz.NewSimpleTrigger(6*time.Second))
65+
_ = sched.ScheduleJob(jobDetail3, quartz.NewSimpleTrigger(3*time.Second))
5766
_ = sched.ScheduleJob(cronJob, cronTrigger)
5867

59-
time.Sleep(time.Second * 10)
68+
time.Sleep(10 * time.Second)
6069

6170
scheduledJob, err := sched.GetScheduledJob(cronJob.JobKey())
6271
if err != nil {
@@ -71,14 +80,20 @@ func sampleScheduler(ctx context.Context, wg *sync.WaitGroup) {
7180
jobKeys, _ = sched.GetJobKeys()
7281
fmt.Println("After delete: ", jobKeys)
7382

74-
time.Sleep(time.Second * 2)
83+
time.Sleep(2 * time.Second)
84+
7585
sched.Stop()
7686
sched.Wait(ctx)
7787
}
7888

7989
func sampleJobs(ctx context.Context, wg *sync.WaitGroup) {
8090
defer wg.Done()
81-
sched := quartz.NewStdScheduler()
91+
sched, err := quartz.NewStdScheduler()
92+
if err != nil {
93+
fmt.Println(err)
94+
return
95+
}
96+
8297
sched.Start(ctx)
8398

8499
cronTrigger, err := quartz.NewCronTrigger("1/5 * * * * *")
@@ -93,6 +108,7 @@ func sampleJobs(ctx context.Context, wg *sync.WaitGroup) {
93108
fmt.Println(err)
94109
return
95110
}
111+
96112
curlJob := job.NewCurlJob(request)
97113
functionJob := job.NewFunctionJobWithDesc(
98114
func(_ context.Context) (int, error) { return 42, nil },
@@ -102,10 +118,10 @@ func sampleJobs(ctx context.Context, wg *sync.WaitGroup) {
102118
curlJobDetail := quartz.NewJobDetail(curlJob, quartz.NewJobKey("curlJob"))
103119
functionJobDetail := quartz.NewJobDetail(functionJob, quartz.NewJobKey("functionJob"))
104120
_ = sched.ScheduleJob(shellJobDetail, cronTrigger)
105-
_ = sched.ScheduleJob(curlJobDetail, quartz.NewSimpleTrigger(time.Second*7))
106-
_ = sched.ScheduleJob(functionJobDetail, quartz.NewSimpleTrigger(time.Second*3))
121+
_ = sched.ScheduleJob(curlJobDetail, quartz.NewSimpleTrigger(7*time.Second))
122+
_ = sched.ScheduleJob(functionJobDetail, quartz.NewSimpleTrigger(3*time.Second))
107123

108-
time.Sleep(time.Second * 10)
124+
time.Sleep(10 * time.Second)
109125

110126
fmt.Println(sched.GetJobKeys())
111127
fmt.Println(shellJob.Stdout())
@@ -118,7 +134,8 @@ func sampleJobs(ctx context.Context, wg *sync.WaitGroup) {
118134
}
119135
fmt.Printf("Function job result: %v\n", functionJob.Result())
120136

121-
time.Sleep(time.Second * 2)
137+
time.Sleep(2 * time.Second)
138+
122139
sched.Stop()
123140
sched.Wait(ctx)
124141
}

0 commit comments

Comments
 (0)