任务调度update

This commit is contained in:
骑着蜗牛追导弹 2023-01-18 14:53:01 +08:00
parent 0dfc11c113
commit 12473fd656
6 changed files with 58 additions and 68 deletions

View File

@ -75,7 +75,7 @@ func (d CronJobDao) Update(config entity.SysCronJob) int64 {
return update return update
} }
// Remove 删除数据 // Delete 删除数据
func (d CronJobDao) Delete(list []int64) bool { func (d CronJobDao) Delete(list []int64) bool {
session := SqlDB.NewSession() session := SqlDB.NewSession()
session.Begin() session.Begin()
@ -89,7 +89,7 @@ func (d CronJobDao) Delete(list []int64) bool {
return true return true
} }
// 通过方法别名获取任务详情 // SelectByFuncAlias 通过方法别名获取任务详情
func (d CronJobDao) SelectByFuncAlias(funcAlias string) *entity.SysCronJob { func (d CronJobDao) SelectByFuncAlias(funcAlias string) *entity.SysCronJob {
config := entity.SysCronJob{} config := entity.SysCronJob{}
session := d.sql(SqlDB.NewSession()) session := d.sql(SqlDB.NewSession())
@ -100,3 +100,15 @@ func (d CronJobDao) SelectByFuncAlias(funcAlias string) *entity.SysCronJob {
} }
return &config return &config
} }
// SelectAll 查找所有启用状态的任务
func (d CronJobDao) SelectAll() ([]entity.SysCronJob, int) {
configs := make([]entity.SysCronJob, 0)
session := d.sql(SqlDB.NewSession())
err := session.Where("status = ?", 1).Find(&configs)
if err != nil {
common.ErrorLog(err)
return nil, 0
}
return configs, len(configs)
}

View File

@ -1,21 +1,9 @@
package job package job
import ( // AliasFuncMap 定时任务: 别名与方法的映射
"cutego/core/service"
"cutego/pkg/common"
)
// 定时任务: 别名与方法的映射
var AliasFuncMap = make(map[string]func()) var AliasFuncMap = make(map[string]func())
// 注册任务 // 任务注册
func RegisterFunc(aliasName string, f func()) {
currentJob := service.CronJobService{}.GetInfoByAlias(aliasName)
AliasFuncMap[aliasName] = f
common.InfoLogf("注册定时任务 --- %s ---> Success", currentJob.JobName)
}
// 注册方法
func init() { func init() {
RegisterFunc("test1", TestJob) AliasFuncMap["test1"] = TestJob1
} }

View File

@ -2,6 +2,6 @@ package job
import "fmt" import "fmt"
func TestJob() { func TestJob1() {
fmt.Println("哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈") fmt.Println("无参数任务执行中...")
} }

View File

@ -25,7 +25,7 @@ func (s CronJobService) GetInfo(id int64) *entity.SysCronJob {
return s.cronJobDao.SelectById(id) return s.cronJobDao.SelectById(id)
} }
// GetInfo 查询数据 // GetInfoByAlias 查询数据
func (s CronJobService) GetInfoByAlias(funcAlias string) *entity.SysCronJob { func (s CronJobService) GetInfoByAlias(funcAlias string) *entity.SysCronJob {
return s.cronJobDao.SelectByFuncAlias(funcAlias) return s.cronJobDao.SelectByFuncAlias(funcAlias)
} }
@ -39,3 +39,8 @@ func (s CronJobService) Edit(config entity.SysCronJob) int64 {
func (s CronJobService) Remove(list []int64) bool { func (s CronJobService) Remove(list []int64) bool {
return s.cronJobDao.Delete(list) return s.cronJobDao.Delete(list)
} }
// FindAll 查找所有
func (s CronJobService) FindAll() ([]entity.SysCronJob, int) {
return s.cronJobDao.SelectAll()
}

30
main.go
View File

@ -3,6 +3,7 @@ package main
// init函数执行顺序自上而下, 最后执行main包里面的init函数 // init函数执行顺序自上而下, 最后执行main包里面的init函数
import ( import (
_ "cutego/core/dao" _ "cutego/core/dao"
_ "cutego/core/job"
"cutego/core/router" "cutego/core/router"
"cutego/pkg/common" "cutego/pkg/common"
"cutego/pkg/config" "cutego/pkg/config"
@ -14,29 +15,8 @@ import (
) )
func main() { func main() {
StartTest() //go testChangeJob()
StartApp()
}
func StartTest() {
fmt.Println("================ Test Content =================")
//cronjob.PrintCronNext()
//cronjob.ExecWithCronNext()
fmt.Println("================ Test Content =================")
}
func StartApp() {
//switch config.AppEnvConfig.Server.RunMode {
//case gin.DebugMode:
// gin.SetMode(gin.DebugMode)
// break
//case gin.ReleaseMode:
// gin.SetMode(gin.ReleaseMode)
// break
//default:
// gin.SetMode(gin.DebugMode)
//}
gin.SetMode(util.IF(config.AppEnvConfig.Server.RunMode == "", "debug", config.AppEnvConfig.Server.RunMode).(string)) gin.SetMode(util.IF(config.AppEnvConfig.Server.RunMode == "", "debug", config.AppEnvConfig.Server.RunMode).(string))
r := router.Init() r := router.Init()
r.Use(logger.LoggerToFile()) r.Use(logger.LoggerToFile())
@ -45,3 +25,9 @@ func StartApp() {
common.FatalfLog("Start server: %+v", err) common.FatalfLog("Start server: %+v", err)
} }
} }
//func testChangeJob() {
// time.Sleep(time.Millisecond * 5000)
// fmt.Println("改变任务调度间隔")
// cronjob.AppendCronFunc("*/5 * * * *", "test1", "1")
//}

View File

@ -1,7 +1,6 @@
package cronjob package cronjob
import ( import (
"cutego/core/api/v1/request"
"cutego/core/job" "cutego/core/job"
"cutego/core/service" "cutego/core/service"
"cutego/pkg/common" "cutego/pkg/common"
@ -19,59 +18,59 @@ import (
// 在26分、29分、33分执行一次0 26,29,33 * * * ? // 在26分、29分、33分执行一次0 26,29,33 * * * ?
// 每天的0点、13点、18点、21点都执行一次0 0 0,13,18,21 * * ? // 每天的0点、13点、18点、21点都执行一次0 0 0,13,18,21 * * ?
// 定时任务: 别名与调度器的映射 // aliasCronMap 定时任务: 别名与调度器的映射
var AliasCronMap = make(map[string]*cron.Cron) var aliasCronMap = make(map[string]*cron.Cron)
// StopCronFunc 停止任务, 不会停止已开始的任务 // StopCronFunc 停止任务, 不会停止已开始的任务
func StopCronFunc(aliasName string) { func StopCronFunc(aliasName string) {
common.InfoLogf("停止任务 %s ---> Start", aliasName) common.InfoLogf("停止任务 %s ---> Start", aliasName)
AliasCronMap[aliasName].Stop() go aliasCronMap[aliasName].Stop()
common.InfoLogf("停止任务 %s ---> Finish", aliasName) common.InfoLogf("停止任务 %s ---> Finish", aliasName)
} }
// StartCronFunc 开始任务 // StartCronFunc 开始任务
func StartCronFunc(aliasName string) { func StartCronFunc(aliasName string) {
common.InfoLogf("唤起任务 %s ---> Start", aliasName) common.InfoLogf("唤起任务 %s ---> Start", aliasName)
AliasCronMap[aliasName].Start() go aliasCronMap[aliasName].Start()
common.InfoLogf("唤起任务 %s ---> Finish", aliasName) common.InfoLogf("唤起任务 %s ---> Finish", aliasName)
} }
// RemoveCronFunc 移除任务 // RemoveCronFunc 移除任务
func RemoveCronFunc(aliasName string) { func RemoveCronFunc(aliasName string) {
common.InfoLogf("移除任务 %s ---> Start", aliasName) common.InfoLogf("移除任务 %s ---> Start", aliasName)
StopCronFunc(aliasName) go StopCronFunc(aliasName)
delete(AliasCronMap, aliasName) delete(aliasCronMap, aliasName)
common.InfoLogf("移除任务 %s ---> Finish", aliasName) common.InfoLogf("移除任务 %s ---> Finish", aliasName)
} }
// AppendCronFunc 新增任务 // AppendCronFunc 新增任务
func AppendCronFunc(jobCron string, aliasName string, status string) { func AppendCronFunc(jobCron string, aliasName string, status string) {
if aliasCronMap[aliasName] != nil {
aliasCronMap[aliasName].Stop()
aliasCronMap[aliasName] = nil
}
common.InfoLogf("新增任务 %s ---> Start", aliasName) common.InfoLogf("新增任务 %s ---> Start", aliasName)
c := cron.New() c := cron.New()
c.AddFunc(jobCron, job.AliasFuncMap[aliasName]) err := c.AddFunc(jobCron, job.AliasFuncMap[aliasName])
if status == "1" { if err != nil {
c.Start() panic("任务追加失败, " + err.Error())
common.InfoLogf("调度定时任务 --- %s ---> Success", aliasName) }
if status == "1" {
go func() {
c.Start()
aliasCronMap[aliasName] = c
common.InfoLogf("调度定时任务 --- %s ---> Success", aliasName)
}()
} }
AliasCronMap[aliasName] = c
common.InfoLogf("新增任务 %s ---> Finish", aliasName) common.InfoLogf("新增任务 %s ---> Finish", aliasName)
} }
func init() { func init() {
if len(job.AliasFuncMap) > 0 { jobService := service.CronJobService{}
//go test() jobs, total := jobService.FindAll()
index := 1 if len(job.AliasFuncMap) > 0 && total > 0 {
for true { for _, datum := range jobs {
q := request.CronJobQuery{}
q.PageNum = index
data, _ := service.CronJobService{}.FindPage(q)
if len(data) == 0 {
break
}
for _, datum := range data {
AppendCronFunc(datum.JobCron, datum.FuncAlias, datum.Status) AppendCronFunc(datum.JobCron, datum.FuncAlias, datum.Status)
} }
index += 1
}
} }
} }