SpringTask定时任务

一、Spring Task简介

定时任务

三种完成方法

java自带的API java.util.Timer类 java.util.TimerTask类

Quartz框架 开源 功能强大 使用起来稍显复杂

Spring 3.0以后自带了task 调度工具,比Quartz更加的简单方便

二、开发环境准备

创建一个JavaWeb项目

引入jar包

基本的配置

三、如何使用

1.纯xml配置的方式

a.简单定时任务

实现业务功能+配置定时间规则

b.复杂定时任务

cron表达式

 

 

2.全注解的方式

a.在业务方法上提供注解 @Service @Scheduled(参数相同)

b.开启注解支持

@Scheduled所支持的参数: 

1. cron:cron表达式,指定任务在特定时间执行; 

2. fixedDelay:表示上一次任务执行完成后多久再次执行,参数类型为long,单位ms; 

3. fixedDelayString:与fixedDelay含义一样,只是参数类型变为String; 

4. fixedRate:表示按一定的频率执行任务,参数类型为long,单位ms; 

5. fixedRateString: 与fixedRate的含义一样,只是将参数类型变为String; 

6. initialDelay:表示延迟多久再第一次执行任务,参数类型为long,单位ms; 

7. initialDelayString:与initialDelay的含义一样,只是将参数类型变为String; 

8. zone:时区,默认为当前时区,一般没有用到。

springboot使用:

启动类:


testtask2

 SpringTask 默认是单线程的 上面的两个定时任务使用的都是同一个线程;在实际开发中,不希望

所有的任务都运行在一个线程中,想要改成多线程,给SpringTask提供一个多线程的

TaskScheduler,Spring已经有默认实现

 

 SpringTask的入门使用_一生很长 有的人生命走到尽头 才可以停下脚步-CSDN博客_spring task


[springboot] 基于Spring Task实现定时任务_Boone的博客-CSDN博客_springboot task 

多定时任务的并行调度

Springboot定时任务默认是由是单个线程串行调度所有任务,当定时任务很多的时候,为了提高任

务执行效率,避免任务之间互相影响,可以采用并行方式执行定时任务。定义一个ScheduleConfig

配置类并实现SchedulingConfigurer接口,重写configureTasks方法,配置任务调度线程池。

@Configuration
@EnableScheduling
public class ScheduleConfig implements SchedulingConfigurer {
 
	@Override
	public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
		taskRegistrar.setTaskScheduler(taskScheduler());
	}
 
	@Bean
	public TaskScheduler taskScheduler() {
		ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
		taskScheduler.setPoolSize(10);// 配置线程池大小,根据任务数量定制
		taskScheduler.setThreadNamePrefix("spring-task-scheduler-thread-");// 线程名称前缀
		taskScheduler.setAwaitTerminationSeconds(60);// 线程池关闭前最大等待时间,确保最后一定关闭
		taskScheduler.setWaitForTasksToCompleteOnShutdown(true);// 线程池关闭时等待所有任务完成
		taskScheduler.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());// 任务丢弃策略
		return taskScheduler;
	}
}

你可能感兴趣的:(java,spring,spring,boot)