任务调度update
This commit is contained in:
parent
0dfc11c113
commit
12473fd656
|
@ -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)
|
||||||
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,6 @@ package job
|
||||||
|
|
||||||
import "fmt"
|
import "fmt"
|
||||||
|
|
||||||
func TestJob() {
|
func TestJob1() {
|
||||||
fmt.Println("哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈")
|
fmt.Println("无参数任务执行中...")
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
30
main.go
|
@ -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")
|
||||||
|
//}
|
||||||
|
|
|
@ -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{}
|
AppendCronFunc(datum.JobCron, datum.FuncAlias, datum.Status)
|
||||||
q.PageNum = index
|
|
||||||
data, _ := service.CronJobService{}.FindPage(q)
|
|
||||||
if len(data) == 0 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
for _, datum := range data {
|
|
||||||
AppendCronFunc(datum.JobCron, datum.FuncAlias, datum.Status)
|
|
||||||
}
|
|
||||||
index += 1
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue