金色时刻 · 15:48
让好资源,触手可及
AGENT SKILL

16-scheduled-tasks

16-scheduled-tasks 是面向商业与营销的 Agent Skill,来自 TencentBlueKing/bk-ci。查看技能说明、操作步骤与使用约定,并通过原项目了解详细用法。

定时任务开发指南,涵盖 Spring Scheduled、Cron 表达式、分布式任务调度、任务锁、任务监控。当用户创建定时任务、配置 Cron 表达式、实现分布式调度或处理任务并发时使用。

SKILL.md

下载 MD ↓
name16-scheduled-tasks
description定时任务开发指南,涵盖 Spring Scheduled、Cron 表达式、分布式任务调度、任务锁、任务监控。当用户创建定时任务、配置 Cron 表达式、实现分布式调度或处理任务并发时使用。

定时任务开发

定时任务开发指南.

触发条件

当用户需要实现定时任务、周期性任务、Cron 调度时,使用此 Skill。

@Scheduled 注解

@Component
class AuthCronManager(
    private val redisOperation: RedisOperation
) {
    companion object {
        private val logger = LoggerFactory.getLogger(AuthCronManager::class.java)
    }

    // 每天凌晨 2 点执行
    @Scheduled(cron = "0 0 2 * * ?")
    fun cleanExpiredTokens() {
        val lock = RedisLock(redisOperation, "auth:clean:token", 3600)
        if (!lock.tryLock()) {
            logger.info("其他节点正在执行清理任务")
            return
        }
        try {
            doClean()
        } finally {
            lock.unlock()
        }
    }

    // 每 5 分钟执行
    @Scheduled(fixedRate = 300000)
    fun syncPermissions() {
        // 同步权限
    }

    // 上次执行完成后 1 分钟再执行
    @Scheduled(fixedDelay = 60000)
    fun processQueue() {
        // 处理队列
    }
}

Cron 表达式

秒 分 时 日 月 周
0  0  2  *  *  ?   # 每天凌晨 2 点
0  */5 * * * ?     # 每 5 分钟
0  0  0  1  *  ?   # 每月 1 号零点
0  0  8-18 * * ?   # 每天 8-18 点整点

分布式锁保护

@Scheduled(cron = "0 0 3 * * ?")
fun dailyTask() {
    val lock = RedisLock(
        redisOperation = redisOperation,
        lockKey = "cron:daily:task",
        expiredTimeInSeconds = 7200  // 2 小时
    )

    if (!lock.tryLock()) {
        return  // 其他节点已在执行
    }

    try {
        logger.info("开始执行每日任务")
        doDailyTask()
        logger.info("每日任务执行完成")
    } catch (e: Exception) {
        logger.error("每日任务执行失败", e)
    } finally {
        lock.unlock()
    }
}

配置启用

@Configuration
@EnableScheduling
class ScheduleConfiguration

最佳实践

  1. 分布式锁:多节点部署时使用 Redis 锁
  2. 异常处理:捕获异常避免影响后续执行
  3. 日志记录:记录任务开始和结束
  4. 合理间隔:避免任务重叠执行

相关文件

  • auth/biz-auth/src/main/kotlin/com/tencent/devops/auth/cron/

来源:TencentBlueKing/bk-ci · MIT 许可 · 许可原文 · MD 为来源页保存的历史版本