java springboot 实现定时器任务

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

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

如下便是关于 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);
    }
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hanchufeng2020

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值