javaspringboot 实现定时器任务

it2023-07-14  76

这两天在做一个物联网的项目,设备是智能断漏器,使用场景,固定时间关闭,固定时间打开。也就是固定时间开电,固定时间关电。设置了一个一张表用于存储需要执行的任务。界面如下:

根据上边提供的时间,如果时间到了,就执行调用设备对应的远程控制指令。但是,需要有一个定时器实时监测。

如下便是关于 springboot 的@Scheduled 定时器

import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.List;

import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.context.annotation.Configuration; import org.springframework.core.annotation.Order; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component;

import com.ruoyi.system.domain.FireLeakbreakerTimer; import com.ruoyi.system.service.IFireLeakbreakerDeviceService; import com.ruoyi.system.service.IFireLeakbreakerTimerService; /***  * 断漏器定时开关  * @author jason  *  */ @Component  @Configuration @EnableScheduling //启用调度器 public class ScheduleJobInitListenerLeakBreaker{     private Logger logger = LoggerFactory.getLogger(getClass());     @Autowired     IFireLeakbreakerTimerService iFireLeakbreakerTimerService;     @Autowired     IFireLeakbreakerDeviceService iFireLeakbreakerDeviceService;     @Scheduled(cron="0 */5 * * * ?") //这里是没5分钟执行一次     public  void run() throws Exception {         logger.info("ScheduleJobInitListenerLeakBreaker start .... ");         FireLeakbreakerTimer fireLeakbreakerTimer = new FireLeakbreakerTimer();         //批量打开         List<FireLeakbreakerTimer>  openList =  iFireLeakbreakerTimerService.selectFireLeakbreakerTimerListByOpenTime();//这里查询对应的任务信息         for (FireLeakbreakerTimer fireLeakbreakerTimer2 : openList) {             if(fireLeakbreakerTimer2.getNextOpenTimer().after(new Date())){                 //调用打开指令。                 iFireLeakbreakerDeviceService.openDeviceCommand(fireLeakbreakerTimer2.getDeviceId()+"");                 //更新断漏器定时任务下次打开时间                 fireLeakbreakerTimer2.setNextOpenTimer(getDate(fireLeakbreakerTimer2.getOpenTimerHour(),fireLeakbreakerTimer2.getOpenTimerMinute()));                 iFireLeakbreakerTimerService.updateFireLeakbreakerTimer(fireLeakbreakerTimer2);             }         }         //批量关闭         List<FireLeakbreakerTimer>  closeList =  iFireLeakbreakerTimerService.selectFireLeakbreakerTimerListByCloseTime();//这里查询对应的任务信息         for (FireLeakbreakerTimer fireLeakbreakerTimer2 : closeList) {             if(fireLeakbreakerTimer2.getNextOpenTimer().after(new Date())){                 //调用关闭指令。                 iFireLeakbreakerDeviceService.closeDeviceCommand(fireLeakbreakerTimer2.getDeviceId()+"");                 //更新断漏器定时任务下次关闭时间                 fireLeakbreakerTimer2.setNextCloseTimer(getDate(fireLeakbreakerTimer2.getCloseTimerHour(),fireLeakbreakerTimer2.getCloseTimerMinute()));                 iFireLeakbreakerTimerService.updateFireLeakbreakerTimer(fireLeakbreakerTimer2);             }                      }     }     /***      * 获取当天时间并且天数加1,加上传入的小时和分钟      * @param hours      * @param minute      * @return      * @throws ParseException      */     private   Date getDate(String hours,String minute) throws ParseException{          Calendar cal = Calendar.getInstance();          cal.add(Calendar.DATE, 1);          int day = cal.get(Calendar.DATE);          int month = cal.get(Calendar.MONTH) + 1;          int year = cal.get(Calendar.YEAR);         String date  =  year+"-"+month+"-"+day+" " +hours+":"+minute;         SimpleDateFormat dateFormat  = new SimpleDateFormat("YYYY-MM-dd HH:mm");         return dateFormat.parse(date);     }      }

最新回复(0)