package jobs import ( "IotAdmin/common/jobs/models" "IotAdmin/core/sdk" "IotAdmin/core/sdk/pkg/cronjob" "gorm.io/gorm" ) func init() { jobList = make(map[string]JobExec) } var ( // jobList 定义的job jobList map[string]JobExec ) // InitJob 初始化job func InitJob() { initJobList() Setup(sdk.Runtime.GetDb()) } // 需要将定义的struct 添加到字典中; // 字典 key 可以配置到 自动任务 调用目标 中; func initJobList() { } func AddJobs(mp map[string]JobExec) { for k, v := range mp { jobList[k] = v } } // Setup 初始化 func Setup(dbs map[string]*gorm.DB) { jobLogger.Info("STARTING...") for k, db := range dbs { sdk.Runtime.SetCrontab(k, cronjob.NewWithSecondsLogger(jobLogger)) setup(k, db) } } func setup(key string, db *gorm.DB) { crontab := sdk.Runtime.GetCrontabKey(key) sysJob := models.SysJob{} jobList := make([]models.SysJob, 0) err := sysJob.GetList(db, &jobList) if err != nil { jobLogger.Errorf("INIT [%s] ERROR: %s", key, err.Error()) } if len(jobList) == 0 { jobLogger.Infof("TOTAL:0") } _, err = sysJob.RemoveAllEntryID(db) if err != nil { jobLogger.Errorf("REMOVE ALL ENTRY [%s] ERROR: %s", key, err.Error()) } for i := 0; i < len(jobList); i++ { if jobList[i].JobType == 1 { j := &HttpJob{} j.InvokeTarget = jobList[i].InvokeTarget j.CronExpression = jobList[i].CronExpression j.JobId = jobList[i].JobId j.Name = jobList[i].JobName j.DbKey = key j.Logger = jobLogger sysJob.EntryId, err = AddJob(crontab, j) } else if jobList[i].JobType == 2 { j := &ExecJob{} j.InvokeTarget = jobList[i].InvokeTarget j.CronExpression = jobList[i].CronExpression j.JobId = jobList[i].JobId j.Name = jobList[i].JobName j.Args = jobList[i].Args j.DbKey = key j.Logger = jobLogger sysJob.EntryId, err = AddJob(crontab, j) } jobLogger.Infof("ADD JOB: %s", jobList[i].JobName) err = sysJob.Update(db, jobList[i].JobId) } // 启动任务 crontab.Start() jobLogger.Infof("START [%s] SUCCESS", key) // 关闭任务 defer func() { jobLogger.Infof("STOP [%s]\r\n\r\n", key) crontab.Stop() }() select {} } // GetJobKeys 获取job key列表 func GetJobKeys() map[string]string { var mp = make(map[string]string) for k, v := range jobList { mp[k] = v.GetName() } return mp }