From b26258c8ab7f4ec1049485dc9ebda921251182da Mon Sep 17 00:00:00 2001 From: zhangwenjian Date: Thu, 20 Aug 2020 06:30:44 +0800 Subject: [PATCH] feat: Task scheduling supports function with parameters MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 注意:参数资源sql; ALTER TABLE `sys_job` ADD COLUMN `args` varchar(255) NULL COMMENT '目标参数' AFTER `invoke_target`; --- apis/sysjob/sysjob.go | 1 + jobs/examples.go | 18 ++++++++++++++++-- jobs/jobbase.go | 4 +++- jobs/type.go | 6 +++--- models/sysjob.go | 1 + 5 files changed, 24 insertions(+), 6 deletions(-) diff --git a/apis/sysjob/sysjob.go b/apis/sysjob/sysjob.go index dfb6dc44..deeb78b1 100644 --- a/apis/sysjob/sysjob.go +++ b/apis/sysjob/sysjob.go @@ -114,6 +114,7 @@ func StartJob(c *gin.Context) { j.CronExpression = result.CronExpression j.JobId = result.JobId j.Name = result.JobName + j.Args = result.Args data.EntryId, err = jobs.AddJob(j) } diff --git a/jobs/examples.go b/jobs/examples.go index cef1996d..cc0ba853 100644 --- a/jobs/examples.go +++ b/jobs/examples.go @@ -18,7 +18,21 @@ func InitJob() { type ExamplesOne struct { } -func (t ExamplesOne) Exec() { +func (t ExamplesOne) Exec(arg interface{}) error { str := time.Now().Format(timeFormat) + " [INFO] JobCore ExamplesOne exec success" - fmt.Println(str) + // TODO: 这里需要注意 Examples 传入参数是 string 所以 arg.(string);请根据对应的类型进行转化; + switch arg.(type) { + + case string: + if arg.(string) != "" { + fmt.Println("string", arg.(string)) + fmt.Println(str, arg.(string)) + } else { + fmt.Println("arg is nil") + fmt.Println(str, "arg is nil") + } + break + } + + return nil } diff --git a/jobs/jobbase.go b/jobs/jobbase.go index e6034060..ffca3d98 100644 --- a/jobs/jobbase.go +++ b/jobs/jobbase.go @@ -23,6 +23,7 @@ type JobCore struct { JobId int EntryId int CronExpression string + Args string } // 任务类型 http @@ -41,7 +42,7 @@ func (e *ExecJob) Run() { global.JobLogger.Warning(" ExecJob Run job nil", e) return } - CallExec(obj.(JobsExec)) + CallExec(obj.(JobsExec), e.Args) // 结束时间 endTime := time.Now() @@ -119,6 +120,7 @@ func Setup() { j.CronExpression = jobList[i].CronExpression j.JobId = jobList[i].JobId j.Name = jobList[i].JobName + j.Args = jobList[i].Args sysJob.EntryId, err = AddJob(j) } _, err = sysJob.Update(jobList[i].JobId) diff --git a/jobs/type.go b/jobs/type.go index 39d94906..a7ede6af 100644 --- a/jobs/type.go +++ b/jobs/type.go @@ -6,9 +6,9 @@ type Job interface { } type JobsExec interface { - Exec() + Exec(arg interface{}) error } -func CallExec(e JobsExec) { - e.Exec() +func CallExec(e JobsExec, arg interface{}) error { + return e.Exec(arg) } diff --git a/models/sysjob.go b/models/sysjob.go index 017114cd..c188d9e6 100644 --- a/models/sysjob.go +++ b/models/sysjob.go @@ -12,6 +12,7 @@ type SysJob struct { JobType int `json:"jobType" gorm:"size:1;"` // 任务类型 CronExpression string `json:"cronExpression" gorm:"size:255;"` // cron表达式 InvokeTarget string `json:"invokeTarget" gorm:"size:255;"` // 调用目标 + Args string `json:"args" gorm:"size:255;"` // 目标参数 MisfirePolicy int `json:"misfirePolicy" gorm:"size:255;"` // 执行策略 Concurrent int `json:"concurrent" gorm:"size:1;"` // 是否并发 Status int `json:"status" gorm:"size:1;"` // 状态