main.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // main.go
  2. package main
  3. import (
  4. "context"
  5. "go-policy-service/config"
  6. "go-policy-service/models"
  7. "go-policy-service/services"
  8. "go-policy-service/utils"
  9. "time"
  10. "github.com/robfig/cron/v3"
  11. )
  12. func main() {
  13. // 初始化配置
  14. cfg, err := config.LoadConfig()
  15. if err != nil {
  16. panic("Failed to load config: " + err.Error())
  17. }
  18. // 初始化日志
  19. utils.InitLogger(cfg.LogLevel)
  20. // 初始化数据库连接
  21. if err := models.InitDB(cfg); err != nil {
  22. utils.Logger.Fatal("Failed to connect database: ", err)
  23. }
  24. // 创建处理器
  25. processor := services.NewTaskProcessor(
  26. utils.NewHttpClient(30*time.Second),
  27. cfg.Concurrency,
  28. )
  29. // 设置定时任务
  30. c := cron.New()
  31. _, err = c.AddFunc("@every "+cfg.Interval, func() {
  32. utils.Logger.Info("Starting scheduled task processing...")
  33. ctx, cancel := context.WithTimeout(context.Background(), 9*time.Minute)
  34. defer cancel()
  35. if err := processor.ProcessTasks(ctx); err != nil {
  36. utils.Logger.Error("Task processing failed: ", err)
  37. }
  38. })
  39. if err != nil {
  40. utils.Logger.Fatal("Failed to schedule task: ", err)
  41. }
  42. c.Start()
  43. utils.Logger.Info("Service started successfully")
  44. // 保持主进程运行
  45. select {}
  46. }