1.在启动类配置注解 @EnableScheduling
2.建ScheduleConfig
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
public class ScheduleConfig implements SchedulingConfigurer{
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
TaskScheduler taskScheduler = taskScheduler();
taskRegistrar.setTaskScheduler(taskScheduler);
}
@Bean(destroyMethod = "shutdown")
public ThreadPoolTaskScheduler taskScheduler() {
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.setPoolSize(20);
scheduler.setThreadNamePrefix("task-");
scheduler.setAwaitTerminationSeconds(60);
scheduler.setWaitForTasksToCompleteOnShutdown(true);
return scheduler;
}
}
3.具体逻辑
/**
* 定时任务
*
* @author yanyf
* 2019/9/20
*/
@Component
public class TimerTask implements CommandLineRunner {
private Logger logger = LogManager.getLogger(this.getClass());
/**
* 1.启动时执行
*/
@Override
public void run(String... args) throws Exception {
logger.info("========定时任务已开启========");
}
/**
* 2.之后按要求执行
*
* 一些cron表达式:
* 0 0/15 * * * ?每隔15分钟 0 0/7 * * * ?
* 0 0 0/1 * * ? 每隔1小时
* 0 * 14 * * ? 在每天下午2点到下午2:59期间的每1分钟触发
* 0 0 10 L * ? 每个月最后一天的10点0分0秒触发任务
* 0 0 1 * * ? 每天凌晨1点
*
*/
/**
* 例如 整点查询 是否有 需要发送的短信
*/
@Scheduled(cron = "0 0 0/1 * * ?")
public void sendMessage() {
// 具体逻辑
}