import org.springframework.scheduling.annotation.EnableScheduling;
1、首先:启动类上加注解:@EnableScheduling
2、service层需要执行的任务(固定时间点)
@Override
// @Scheduled(cron = "0 0 9,19 * * ?") // 每天的:AM:9,PM:19
@Scheduled(cron = "0 0 */1 * * ?") // 每隔1小时请求一次
public void saveWaterInfo() {
List<Map<String, Object>> list = new ArrayList<>();
for (String requestCommand : Global.WATER_QUALITY_TYPE_REQUEST) {
String requestMessage = getRequestMessage(requestCommand);
try {
Thread.sleep(Global.REQUEST_RESPONSE_TIME_DIFFERENCE);
} catch (InterruptedException e) {
e.printStackTrace();
}
Map<String, Object> result = getWaterInfoResult(requestMessage);
list.add(result);
try {
Thread.sleep(Global.REQUEST_RESPONSE_TIME_DIFFERENCE);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
waterInfoMapper.saveWaterInfo(list);
}
3、数据库配置定时:
package com.moyuaninfo.waterinfo.service.impl;
import com.moyuaninfo.waterinfo.dao.CronMapper;
import com.moyuaninfo.waterinfo.service.WaterInfoService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;
import java.util.Date;
/**
* @ClassName WaterInfoServiceImplQuartz
* @Description TODO
* @Author zhaoGq
* @Date 2019/12/17 13:17
* @Version 1.0
**/
@Configuration
public class WaterInfoServiceImplQuartz implements SchedulingConfigurer {
@Autowired
private WaterInfoService waterInfoService;
@Autowired
private CronMapper cronMapper;
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
scheduledTaskRegistrar.addTriggerTask(new Runnable() {
@Override
public void run() {
try {
// 异步定时操作
waterInfoService.saveWaterInfo();
} catch (Exception e) {
e.printStackTrace();
}
}
}, new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
String cron = cronMapper.getCron();
if(StringUtils.isBlank(cron)) {
return null;
}
// 定时任务触发,可修改定时任务的执行周期
CronTrigger trigger = new CronTrigger(cron);
Date nextExecDate = trigger.nextExecutionTime(triggerContext);
return nextExecDate;
}
});
}
}
3、数据库表中的配置: