package com.southern.power.grid.task; import com.southern.power.grid.service.IRegionalWeatherDataService; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.concurrent.atomic.AtomicBoolean; @Slf4j @Component public class WeatherDataScheduleTask { @Resource private IRegionalWeatherDataService regionalWeatherDataService; // 防止并发执行 private final AtomicBoolean running = new AtomicBoolean(false); /* @PostConstruct public void init(){ log.info("【区域天气数据同步任务】项目启动触发"); execute(); }*/ /** * 每小时第20分钟执行 */ @Scheduled(cron = "0 20 * * * ?") public void schedule() { log.info("【区域天气数据同步任务】定时触发--开始"); execute(); } /** * 实际执行逻辑 */ private void execute() { if (!running.compareAndSet(false, true)) { log.warn("任务正在执行,跳过本次触发"); return; } try { regionalWeatherDataService.scheduleSyncWeatherData(); log.info("【区域天气数据同步任务】定时触发--结束"); } catch (Exception e) { log.error("【区域天气数据同步任务】执行异常", e); } finally { running.set(false); } } }