1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- package job
- import (
- "context"
- "time"
- "github.com/go-nunu/nunu-layout-advanced/internal/service"
- "github.com/go-nunu/nunu-layout-advanced/pkg/log"
- )
- // ShardingJob 分表管理定时任务
- type ShardingJob struct {
- shardingService service.ShardingService
- logger *log.Logger
- }
- func NewShardingJob(
- shardingService service.ShardingService,
- logger *log.Logger,
- ) *ShardingJob {
- return &ShardingJob{
- shardingService: shardingService,
- logger: logger,
- }
- }
- // InitSharding 初始化分表(启动时执行一次)
- func (j *ShardingJob) InitSharding() {
- ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
- defer cancel()
- j.logger.Info("执行分表初始化任务...")
-
- err := j.shardingService.InitializeSharding(ctx)
- if err != nil {
- j.logger.Error("分表初始化失败: " + err.Error())
- } else {
- j.logger.Info("分表初始化完成")
- }
- }
- // CleanOldTables 清理过期分表(定时执行)
- func (j *ShardingJob) CleanOldTables() {
- ctx, cancel := context.WithTimeout(context.Background(), 10*time.Minute)
- defer cancel()
- j.logger.Info("执行分表清理任务...")
-
- err := j.shardingService.CleanOldTables(ctx)
- if err != nil {
- j.logger.Error("分表清理失败: " + err.Error())
- } else {
- j.logger.Info("分表清理完成")
- }
- }
- // CheckNewPeriodTables 检查是否需要创建新周期的分表(每月第一天执行)
- func (j *ShardingJob) CheckNewPeriodTables() {
- ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
- defer cancel()
- j.logger.Info("检查是否需要创建新周期分表...")
-
- // 检查是否是月初第一天
- now := time.Now()
- if now.Day() != 1 {
- j.logger.Info("不是月初第一天,跳过新周期分表检查")
- return
- }
-
- err := j.shardingService.InitializeSharding(ctx)
- if err != nil {
- j.logger.Error("新周期分表创建失败: " + err.Error())
- } else {
- j.logger.Info("新周期分表检查完成")
- }
- }
|