package com.yunhai.userbase.task;
import com.yunhai.userbase.service.impl.SignKeyCacheService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
/**
* 签名密钥共享缓存的对账/同步定时任务。
*
* 每天凌晨 3:05 执行(让 {@link OperationLogCleanupTask} 的 3:00 先跑完,避免同一时间打库):
*
* 注:应用日常新增/删除/重置密钥会通过 * {@link com.yunhai.userbase.service.impl.ApplicationInfoService} 的事务事件 * 实时触发 {@link SignKeyCacheService} 的 syncOne/removeOne, * 本任务仅作为「每日对账兜底」,防止 Redis 故障或人工介入导致的偏差。 */ @Component public class SignKeyCacheDailyTask { private static final Logger log = LoggerFactory.getLogger(SignKeyCacheDailyTask.class); @Autowired private SignKeyCacheService signKeyCacheService; /** * 每天凌晨 3:05 执行,错开 OperationLogCleanupTask 的 3:00。 */ @Scheduled(cron = "0 5 3 * * ?") @Async public void syncAll() { try { int n = signKeyCacheService.refreshAll(); log.info("[SignKeyCache] daily sync-all done, synced apps={}", n); } catch (Exception e) { log.warn("[SignKeyCache] daily sync-all failed: {}", e.getMessage()); } } }