1、每隔10s执行一次,基准是上批次执行完成,也就是要等待上个任务执行完成,下个任务10s后执行
@Scheduled(fixedDelay = 10000)
public void doSomething() {
//TODO
}
2、每隔10s执行一次,基准是上批次开始执行,也就是不等待,每10s一个执行窗口
@Scheduled(fixedRate = 10000)
public void doSomething() {
//TODO
}
3、cron,比较常用
@Scheduled(cron = "0 1 0 * * ?")
4、动态变更cron
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.scheduling.support.CronTrigger; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.concurrent.ScheduledFuture; @RestController("/") public class TimerTest { private ScheduledFuture<?> future; @Autowired private ThreadPoolTaskScheduler threadPoolTaskScheduler; @Bean public ThreadPoolTaskScheduler threadPoolTaskScheduler() { return new ThreadPoolTaskScheduler(); } @RequestMapping("/start") public String start(@RequestParam String time) { this.stop(); future = threadPoolTaskScheduler.schedule(() -> System.out.println("-=-=-=-=-="), new CronTrigger("0 0/" + time + " * * * ? ")); System.out.println("start"); return "start"; } public String stop() { if (null != future) { future.cancel(true); } System.out.println("stop"); return "stop"; } }