feat: 添加数据库集成、定时任务调度器和事件Hook体系
- 新增数据库配置项(DB_TYPE, DB_HOST, DB_PORT等),支持MySQL和PostgreSQL - 集成GORM实现数据库连接和自动迁移功能 - 添加定时任务调度器(cmd/scheduler),基于robfig/cron实现秒级调度 - 实现事件Hook体系,支持同步/异步处理和优先级排序 - 更新构建脚本,编译server、cli、scheduler三个二进制文件 - 配置systemd服务管理定时任务调度器 - 重构项目结构,新增crontab和hooks目录模块 - 更新README文档,完善各组件使用说明和部署配置
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"apiServer_service/crontab"
|
||||
"apiServer_service/crontab/tasks"
|
||||
db "apiServer_service/models/database"
|
||||
"apiServer_service/utils/logger"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"github.com/joho/godotenv"
|
||||
)
|
||||
|
||||
func init() {
|
||||
if err := godotenv.Load(".env"); err != nil {
|
||||
fmt.Println("Warning: .env file not found, using system environment variables")
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
if os.Getenv("DB_TYPE") != "" {
|
||||
db.ConnectDatabase()
|
||||
}
|
||||
|
||||
scheduler := crontab.DefaultScheduler()
|
||||
tasks.RegisterTasks(scheduler)
|
||||
|
||||
if len(os.Args) > 1 {
|
||||
switch os.Args[1] {
|
||||
case "run-once":
|
||||
logger.CronInfo("Scheduler", "立即执行所有任务")
|
||||
scheduler.RunOnce()
|
||||
return
|
||||
case "run":
|
||||
if len(os.Args) > 2 {
|
||||
name := os.Args[2]
|
||||
if scheduler.RunTaskByName(name) {
|
||||
logger.CronInfo("Scheduler", fmt.Sprintf("任务执行完成: %s", name))
|
||||
} else {
|
||||
logger.CronError("Scheduler", fmt.Sprintf("未找到任务: %s", name))
|
||||
}
|
||||
return
|
||||
}
|
||||
logger.CronError("Scheduler", "用法: scheduler run <任务名>")
|
||||
return
|
||||
case "list":
|
||||
fmt.Println("已注册任务:")
|
||||
for _, task := range scheduler.GetTasks() {
|
||||
fmt.Printf(" - %-20s %s\n", task.Name(), task.Spec())
|
||||
}
|
||||
return
|
||||
default:
|
||||
fmt.Printf("未知命令: %s\n", os.Args[1])
|
||||
printUsage()
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
scheduler.Start()
|
||||
logger.CronInfo("Scheduler", "调度器已启动")
|
||||
|
||||
quit := make(chan os.Signal, 1)
|
||||
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
|
||||
<-quit
|
||||
|
||||
logger.CronInfo("Scheduler", "正在停止...")
|
||||
scheduler.Stop()
|
||||
logger.CronInfo("Scheduler", "已停止")
|
||||
}
|
||||
|
||||
func printUsage() {
|
||||
fmt.Println("用法:")
|
||||
fmt.Println(" scheduler 启动调度器(后台常驻)")
|
||||
fmt.Println(" scheduler list 列出所有已注册任务")
|
||||
fmt.Println(" scheduler run-once 立即执行所有任务一次")
|
||||
fmt.Println(" scheduler run <名> 立即执行指定任务一次")
|
||||
}
|
||||
Reference in New Issue
Block a user