1. 程式人生 > >定時任務schedule(spring boot )

定時任務schedule(spring boot )

支持 oot lsi 特定 sim led 輕量 bean gist

1. 定時任務
實現方式:
SpringBoot自帶的Scheduled,可以將它看成一個輕量級的Quartz,而且使用起來比Quartz簡單許多,本文主要介紹。

執行方式:
單線程(串行)------------多個定時任務,一個跑完,其他的才能跑
多線程(並行)

2. 創建定時任務

@Component
@EnableScheduling
public class ScheduledTest
{
@Scheduled(cron="0/5 * * * * ?")
public void executeFileDownLoadTask() {

// 間隔2分鐘,執行任務
Thread current = Thread.currentThread();

System.out.println("定時任務1:"+current.getId());
}
}

備註:
@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 )