55 lines
1.5 KiB
Java

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);
}
}
}