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);
}
}
相關文章
- SpringBoot如何實現定時任務Spring Boot
- Java如何實現定時任務?Java
- springboot整合quarzt實現動態定時任務Spring Boot
- SpringBoot定時任務Spring Boot
- springboot:定時任務Spring Boot
- 深入 Java Timer 定時任務排程器實現原理Java
- 玩轉SpringBoot:SpringBoot的幾種定時任務實現方式Spring Boot
- 使用Java實現定時任務排程Java
- Java定時任務實現優惠碼Java
- springboot整合Quartz實現動態配置定時任務Spring Bootquartz
- SpringBoot 定時任務ScheduledSpring Boot
- springboot(九):定時任務Spring Boot
- springboot定時任務之旅Spring Boot
- springboot定時任務@ScheduledSpring Boot
- Laravel + Workerman 實現多程式定時器任務Laravel定時器
- SpringBoot中併發定時任務的實現、動態定時任務的實現(看這一篇就夠了)Spring Boot
- SpringBoot整合Quartz定時任務Spring Bootquartz
- springboot+quartz以持久化的方式實現定時任務Spring Bootquartz持久化
- Java 定時任務Java
- SpringBoot與非同步任務、定時任務、郵件任務Spring Boot非同步
- SpringBoot執行定時任務@ScheduledSpring Boot
- SpringBoot系列——動態定時任務Spring Boot
- springboot Quartz 定時任務工具類Spring Bootquartz
- java web定時任務JavaWeb
- Java & Go 定時任務JavaGo
- linux實現一個定時任務Linux
- 基於redis實現定時任務Redis
- Linux中如何實現定時任務Linux
- Springboot-之定時任務,啟動執行任務Spring Boot
- 如何用 Java 實現 Web 應用中的定時任務?JavaWeb
- SpringBoot第十七篇:定時任務Spring Boot
- springboot定時任務優雅退出方案Spring Boot
- java定時任務巢狀Java巢狀
- java定時任務--Timer、TimerTaskJava
- Java編寫定時任務Java
- PHP定時執行任務的實現PHP
- [筆記]laravel定時任務的實現筆記Laravel
- SpringBoot實現輕量級動態定時任務管控及元件化Spring Boot元件化