定時任務schedule(spring boot )
1. 定時任務
實現方式:
SpringBoot自帶的Scheduled,可以將它看成一個輕量級的Quartz,而且使用起來比Quartz簡單許多,本文主要介紹。
執行方式:
單線程(串行)------------多個定時任務,一個跑完,其他的才能跑
多線程(並行)
2. 創建定時任務
@Component
@EnableScheduling
public class ScheduledTest
{
@Scheduled(cron="0/5 * * * * ?")
public void executeFileDownLoadTask() {
// 間隔2分鐘,執行任務
Thread current = Thread.currentThread();
}
}
備註:
@EnableScheduling :用於發現註解@Scheduled的任務並後臺執行;
@Scheduled(cron="0 0/2 * * * ?") :用於標註這個方法是一個定時任務的方法,有多種配置可選。cron支持cron表達式,指定任務在特定時間執行;fixedRate以特定頻率執行任務;fixedRateString以string的形式配置執行頻率。
3. 並行任務和異步任務的配置
@Configuration
@EnableScheduling
public class ScheduleConfig implements SchedulingConfigurer, AsyncConfigurer
/*
* 並行任務
*/
public void configureTasks(ScheduledTaskRegistrar taskRegistrar)
{
TaskScheduler taskScheduler = taskScheduler();
taskRegistrar.setTaskScheduler(taskScheduler);
}
/**
* 並行任務使用策略:多線程處理
*
* @return ThreadPoolTaskScheduler 線程池
*/
@Bean(destroyMethod = "shutdown")
public ThreadPoolTaskScheduler taskScheduler()
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.setPoolSize(20);
scheduler.setThreadNamePrefix("task-");
scheduler.setAwaitTerminationSeconds(60);
scheduler.setWaitForTasksToCompleteOnShutdown(true);
return scheduler;
}
/*
* 異步任務
*/
public Executor getAsyncExecutor()
{
Executor executor = taskScheduler();
return executor;
}
/*
* 異步任務 異常處理
*/
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler()
{
return new SimpleAsyncUncaughtExceptionHandler();
}
}
備註:
SchedulingConfigurer: 將線程池註入TaskScheduler,並與ScheduledTaskRegistrar 關聯;
AsyncConfigurer:用於異步處理
4. 啟動
@SpringBootApplication
public class Application
{
public static void main(String[] args)
{
SpringApplication.run(Application.class, args);
}
}
本文轉自 : https://www.cnblogs.com/cityspace/p/6638578.html
https://blog.csdn.net/xzyxcy/article/details/79746689
定時任務schedule(spring boot )