mirror of https://github.com/ouqiang/gocron
对保存任务的map加锁
parent
30b562223a
commit
f39d0ac508
|
@ -4,19 +4,20 @@ import (
|
||||||
"github.com/robfig/cron"
|
"github.com/robfig/cron"
|
||||||
"errors"
|
"errors"
|
||||||
"scheduler/utils/app"
|
"scheduler/utils/app"
|
||||||
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
// todo map并发访问加锁
|
|
||||||
|
|
||||||
var DefaultCronTask CronTask;
|
var DefaultCronTask CronTask;
|
||||||
|
|
||||||
type CronTask struct {
|
type CronTask struct {
|
||||||
|
sync.RWMutex
|
||||||
tasks map[string]*cron.Cron
|
tasks map[string]*cron.Cron
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
if app.Installed {
|
if app.Installed {
|
||||||
DefaultCronTask = CronTask{
|
DefaultCronTask = CronTask{
|
||||||
|
sync.RWMutex{},
|
||||||
make(map[string]*cron.Cron),
|
make(map[string]*cron.Cron),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,6 +32,8 @@ func(cronTask *CronTask) Add(name string, spec string, cmd func() ) error {
|
||||||
return errors.New("任务已存在")
|
return errors.New("任务已存在")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cronTask.Lock()
|
||||||
|
defer cronTask.Unlock()
|
||||||
cronTask.tasks[name] = cron.New()
|
cronTask.tasks[name] = cron.New()
|
||||||
err := cronTask.tasks[name].AddFunc(spec, cmd)
|
err := cronTask.tasks[name].AddFunc(spec, cmd)
|
||||||
|
|
||||||
|
@ -49,6 +52,8 @@ func(cronTask *CronTask) addOrReplace(name string, spec string, cmd func() ) err
|
||||||
|
|
||||||
// 判断任务是否存在
|
// 判断任务是否存在
|
||||||
func(cronTask *CronTask) IsExist(name string) bool {
|
func(cronTask *CronTask) IsExist(name string) bool {
|
||||||
|
cronTask.RLock()
|
||||||
|
defer cronTask.RUnlock()
|
||||||
_, ok := cronTask.tasks[name]
|
_, ok := cronTask.tasks[name]
|
||||||
|
|
||||||
return ok
|
return ok
|
||||||
|
@ -71,14 +76,15 @@ func(cronTask *CronTask) Stop(name string) {
|
||||||
// 删除任务
|
// 删除任务
|
||||||
func(cronTask *CronTask) Delete(name string) {
|
func(cronTask *CronTask) Delete(name string) {
|
||||||
cronTask.Stop(name)
|
cronTask.Stop(name)
|
||||||
cronTask.tasks[name] = nil
|
cronTask.Lock()
|
||||||
|
defer cronTask.Unlock()
|
||||||
delete(cronTask.tasks, name)
|
delete(cronTask.tasks, name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 运行所有任务
|
// 运行所有任务
|
||||||
func(cronTask *CronTask) run() {
|
func(cronTask *CronTask) run() {
|
||||||
for _, cron := range cronTask.tasks {
|
for _, cron := range cronTask.tasks {
|
||||||
// cron内部有开启goroutine,此处不用新建
|
// cron内部有开启goroutine,此处不用新建goroutine
|
||||||
cron.Start()
|
cron.Start()
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue