一、使用@Scheduled
(1)在启动类中添加@EnableScheduling
@EnableScheduling
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
(2)在定时方法上添加@Scheduled(cron = " xxx")
@Scheduled(cron = "0/5 * * * * ?")
public void scheduleTask() {
System.out.println("执行定时任务");
}
二、实现SchedulingConfigurer接口
@Component
@EnableScheduling
public class MyTask implements SchedulingConfigurer {
@Autowired
protected CronMapper cronMapper;
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
scheduledTaskRegistrar.addTriggerTask(() -> {/*定时任务逻辑*/},triggerContext -> {
String cron = cronMapper.getCron();
if (cron.isEmpty()) {
System.out.println("cron is null");
}
return new CronTrigger(cron).nextExecutionTime(triggerContext);
});
}
}
三、使用定时任务线程池
//配置定时任务线程池-自定义名称避免冲突
@Bean
public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
ThreadPoolTaskScheduler executor = new ThreadPoolTaskScheduler();
executor.setPoolSize(2);
executor.setThreadNamePrefix("task-");
executor.setWaitForTasksToCompleteOnShutdown(true);
executor.setAwaitTerminationSeconds(60);
executor.initialize();
return executor;
}
@Test
void test() {
threadPoolTaskScheduler.schedule(() -> {
System.out.println("执行了定时任务");
},new CronTrigger("0/5 * * * * ?"));
Thread.sleep(10000000);
}