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、数据库表中的配置: