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);}}
实现方式:
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);}}
相关文章推荐
- springboot中使用定时任务,异步调用,自定义配置参数(八)
- iOS中多线程知识总结:进程、线程、GCD、串行队列、并行队列、全局队列、主线程队列、同步任务、异步任务等(有示例代码)
- spring boot使用自定义配置的线程池执行Async异步任务
- springboot整合Quartz实现动态配置定时任务
- Springboot整合Quartz实现动态配置定时任务
- 在SpringBoot中配置定时任务
- springboot整合Quartz实现动态配置定时任务的方法
- Spring Boot 配置定时任务
- Spring Boot配置定时任务(实例)
- Spring定时任务并行(异步)处理
- springboot整合Quartz实现动态配置定时任务
- SpringBoot定时任务xml配置
- springboot使用定时任务、异步
- springboot整合Quartz实现动态配置定时任务
- spring boot使用自定义配置的线程池执行Async异步任务
- springboot整合Quartz实现动态配置定时任务
- springboot(十一):定时任务,异步调用
- Spring-boot整合Quartz,3、动态配置定时任务
- springboot整合Quartz实现动态配置定时任务