您的位置:首页 > 编程语言 > Java开发

springboot 定时任务(线程配置,并行【同步】、异步等)

2018-02-12 10:58 751 查看
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);}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: