mirror of https://github.com/ouqiang/gocron
性能优化: 当任务较多时, gocron启动慢
parent
94c9963e81
commit
3ed64f9f22
|
@ -120,9 +120,11 @@ func (task *Task) Enable(id int) (int64, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取所有激活任务
|
// 获取所有激活任务
|
||||||
func (task *Task) ActiveList() ([]Task, error) {
|
func (task *Task) ActiveList(page, pageSize int) ([]Task, error) {
|
||||||
|
params := CommonMap{"Page": page, "PageSize": pageSize}
|
||||||
|
task.parsePageAndPageSize(params)
|
||||||
list := make([]Task, 0)
|
list := make([]Task, 0)
|
||||||
err := Db.Where("status = ? AND level = ?", Enabled, TaskLevelParent).
|
err := Db.Where("status = ? AND level = ?", Enabled, TaskLevelParent).Limit(task.PageSize, task.pageLimitOffset()).
|
||||||
Find(&list)
|
Find(&list)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -299,7 +299,7 @@ func addTaskToTimer(id int) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
service.ServiceTask.Add(task)
|
service.ServiceTask.RemoveAndAdd(task)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 解析查询参数
|
// 解析查询参数
|
||||||
|
|
|
@ -95,26 +95,42 @@ type TaskResult struct {
|
||||||
|
|
||||||
// 初始化任务, 从数据库取出所有任务, 添加到定时任务并运行
|
// 初始化任务, 从数据库取出所有任务, 添加到定时任务并运行
|
||||||
func (task Task) Initialize() {
|
func (task Task) Initialize() {
|
||||||
|
logger.Info("开始初始化定时任务")
|
||||||
taskModel := new(models.Task)
|
taskModel := new(models.Task)
|
||||||
taskList, err := taskModel.ActiveList()
|
taskNum := 0
|
||||||
if err != nil {
|
page := 1
|
||||||
logger.Error("定时任务初始化#获取任务列表错误-", err.Error())
|
pageSize := 1000
|
||||||
return
|
maxPage := 1000
|
||||||
|
for page < maxPage {
|
||||||
|
taskList, err := taskModel.ActiveList(page, pageSize)
|
||||||
|
if err != nil {
|
||||||
|
logger.Fatalf("定时任务初始化#获取任务列表错误-", err.Error())
|
||||||
|
}
|
||||||
|
if len(taskList) == 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
for _, item := range taskList {
|
||||||
|
task.Add(item)
|
||||||
|
taskNum++
|
||||||
|
}
|
||||||
|
page++
|
||||||
}
|
}
|
||||||
if len(taskList) == 0 {
|
logger.Infof("定时任务初始化完成, 共%d个定时任务添加到调度器", taskNum)
|
||||||
logger.Debug("任务列表为空")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
task.BatchAdd(taskList)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 批量添加任务
|
// 批量添加任务
|
||||||
func (task Task) BatchAdd(tasks []models.Task) {
|
func (task Task) BatchAdd(tasks []models.Task) {
|
||||||
for _, item := range tasks {
|
for _, item := range tasks {
|
||||||
task.Add(item)
|
task.RemoveAndAdd(item)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 删除任务后添加
|
||||||
|
func (task Task) RemoveAndAdd(taskModel models.Task) {
|
||||||
|
task.Remove(taskModel.Id)
|
||||||
|
task.Add(taskModel)
|
||||||
|
}
|
||||||
|
|
||||||
// 添加任务
|
// 添加任务
|
||||||
func (task Task) Add(taskModel models.Task) {
|
func (task Task) Add(taskModel models.Task) {
|
||||||
if taskModel.Level == models.TaskLevelChild {
|
if taskModel.Level == models.TaskLevelChild {
|
||||||
|
@ -128,8 +144,6 @@ func (task Task) Add(taskModel models.Task) {
|
||||||
}
|
}
|
||||||
|
|
||||||
cronName := strconv.Itoa(taskModel.Id)
|
cronName := strconv.Itoa(taskModel.Id)
|
||||||
// Cron任务采用数组存储, 删除任务需遍历数组, 并对数组重新赋值, 任务较多时,有性能问题
|
|
||||||
serviceCron.RemoveJob(cronName)
|
|
||||||
err := serviceCron.AddFunc(taskModel.Spec, taskFunc, cronName)
|
err := serviceCron.AddFunc(taskModel.Spec, taskFunc, cronName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("添加任务到调度器失败#", err)
|
logger.Error("添加任务到调度器失败#", err)
|
||||||
|
|
Loading…
Reference in New Issue