1、添加@Component注解。
2、注入你想要添加的定时任务的对象。
@Resource
private DeviceService deviceService;
@Resource
private ChargingService chargingService;
@Resource
private RadioService radioService;
@Resource
private DigitalScreenService digitalScreenService;
@Resource
private MsgCollService msgCollService;
3、调用方法,并添加@Scheduled注解,下面的定时任务为每隔五分钟推送设备信息到大屏幕。
/**
* 每隔1小时推送设备信息到大屏幕
*/
// @Scheduled(cron = "0 0 0/1 * * ?")
@Scheduled(cron = "0 0/5 * * * ?")
public void deviceInfoQuartz() {
log.info("定时设备信息推送");
digitalScreenService.uploadDeviceInfo();
}
4、定时的时间使用的是cron表达式。
cron表达式生成网站:https://cron.qqe2.com/
整体类如下展示
@Component
public class Quartz {
@Resource
private DeviceService deviceService;
@Resource
private ChargingService chargingService;
@Resource
private RadioService radioService;
@Resource
private DigitalScreenService digitalScreenService;
@Resource
private MsgCollService msgCollService;
/**
* 每隔30分钟同步redis设备心跳到数据库
* 需判断设备类型
*/
@Scheduled(cron = "0 0 0/1 * * ? ")
// @Scheduled(cron = "0 0/5 * * * ?")
public void heartbeat() {
log.info("sync redis device heartbeat start");
deviceService.heartbeatQuartz();
log.info("sync redis device heartbeat end");
}
/**
* 每隔2小时同步广播平台设备状态到数据库
*/
@Scheduled(cron = "0 0 0/2 * * ? ")
// @Scheduled(cron = "0 0/5 * * * ?")
public void radioStatusQuartz() {
log.info("sync radio device status start");
radioService.radioStatusQuartz(0);
log.info("sync redis device status end");
}
/**
* 每隔1小时推送设备信息到大屏幕
*/
// @Scheduled(cron = "0 0 0/1 * * ?")
@Scheduled(cron = "0 0/5 * * * ?")
public void deviceInfoQuartz() {
log.info("定时设备信息推送");
digitalScreenService.uploadDeviceInfo();
}
/**
* 每隔1小时推送视频流到大屏幕
*/
// @Scheduled(cron = "0 0 0/1 * * ?")
@Scheduled(cron = "0 0/5 * * * ?")
public void monitorInfoQuartz() {
log.info("定时视频流推送");
digitalScreenService.uploadMonitorInfo();
}
/**
* 每隔1小时从闪开同步平台同步充电桩设备状态到数据库
*/
@Scheduled(cron = "0 0 0/1 * * ?")
// @Scheduled(cron = "0 0/5 * * * ?")
public void charingStatusQuartz() {
log.info("同步充电桩数据");
chargingService.updateAllCharging();
}
/**
* 每隔半个月将message信息进行归档
*/
// @Scheduled(cron = "0 0 0/2 * * ? ")
@Scheduled(cron = "0 0 0 1 1/6 ?")
// @Scheduled(cron = "0 0/1 * * * ?")
public void messageCollection() {
log.info("定时归档开始");
msgCollService.autoSave();
log.info("定时归档结束");
}
}
总结
1、定时任务的使用可以用来进行业务代码的测试,因为他是可以读取application配置文件中的配置,与单元测试不同。
2、定时任务还可以完成一些特殊的需求。