seo关于网站搜索排名关键词的标准评定,江西做网站找谁,门户网站开发项目的风险,网业设计目录
1、启动类#xff08;App.java#xff09;上加EnableScheduling注解#xff1a; 开启基于注解的任务调度器
2、同步定时任务
3、多线程#xff08;异步#xff09;定时任务
3.1 配置线程池
3.2 开启异步支持
3.3 定义异步方法
4、Api说明
4.1 fixedDelay
4.…目录
1、启动类App.java上加EnableScheduling注解 开启基于注解的任务调度器
2、同步定时任务
3、多线程异步定时任务
3.1 配置线程池
3.2 开启异步支持
3.3 定义异步方法
4、Api说明
4.1 fixedDelay
4.2 fixedRate
4.3 initialDelay
4.4 cron掌握
cron表达式
① 格式
② 特殊符号
③ 练习
标准格式 * * * * * ? Spring Task是 Spring 框架的一个组件它为任务调度提供了支持使开发者能 创建后台任务 或 定期执行任务 1、启动类App.java上加EnableScheduling注解 开启基于注解的任务调度器
默认情况下系统会自动启动一个线程调度执行项目中定义的所有定时任务
这个注解 是SpringBoot内置的 不需要依赖任何的starter包 2、同步定时任务
需要在定时执行的方法上 添加Scheduled注解
定时执行的方法不能有参数并且一般没有返回值
定时任务所在的类要作为 Spring Bean在类上添加Component注解即可即定时方法所在的类要放到IOC容器里面 注意使用Scheduled注解形式的定时任务默认是单线程来执行项目中所有的定时任务。
即使如果同一时刻有两个定时任务需要执行那么只能其中一个定时任务完成之后再执行下一个定时任务。
如果项目只有一个定时任务还好。若定时任务增多时如果一个任务被阻塞则会导致其他任务无法正常执行。
若要改变这种行为使得定时任务能够并发执行可以配置任务调度线程池来解决以上问题。首先配置一个线程池
package com.***.springtask;import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;Component
Slf4j
EnableAsync //开启异步支持
EnableScheduling //开启定时任务支持
public class ScheduledTask {int i 1;//Scheduled(fixedRate 5000, initialDelay 15*1000)public void task1(){
// i;
// if(i 5){
// ThreadUtil.safeSleep(8*1000);
// }log.debug(task1执行了{}次{},i,Thread.currentThread().getId());}Scheduled(cron 0/5 * * * * ?)Async(asyncScheduledPool)public void task2(){// ThreadUtil.safeSleep(8*1000);log.debug(task2执行了{},Thread.currentThread().getId());}}
3、多线程异步定时任务
3.1 配置线程池
package com.***.config;import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;Component
public class ExecutorConfig {//定义核心线程数public static final int CORE_POOL_SIZE 10;// 最大线程数public static final int MAX_POOL_SIZE 20;// 任务队列容量大小public static final int QUEUE_MAX_COUNT 100;Bean(asyncScheduledPool)public Executor asyncScheduledPool(){//自定义线程池ThreadPoolTaskExecutor threadPoolExecutor new ThreadPoolTaskExecutor();//设置核心线程数threadPoolExecutor.setCorePoolSize(CORE_POOL_SIZE);//设置最大线程数 长工 临时工threadPoolExecutor.setMaxPoolSize(MAX_POOL_SIZE);//设置任务队列容量大小threadPoolExecutor.setQueueCapacity(QUEUE_MAX_COUNT);//设置线程的名称前缀threadPoolExecutor.setThreadNamePrefix(myTask-);//设置拒绝策略threadPoolExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());return threadPoolExecutor;}}3.2 开启异步支持
要在 Spring Boot 应用中启用异步方法调用需在启动类上添加 EnableAsync 注解
3.3 定义异步方法
在服务类中定义一个方法并使用 Async 注解标记它以实现异步执行 4、Api说明
4.1 fixedDelay
Scheduled(fixedDelay 4000)
4.2 fixedRate
Scheduled(fixedRate 10000)
4.3 initialDelay
Scheduled(initialDelay1000, fixedRate5000) //第一次延迟1秒后执行之后按fixedRate的规则每5秒执行一次
4.4 cron掌握
cron表达式
① 格式
Seconds Minutes Hours Day Month Week
② 特殊符号
*任意值
-范围eg3-5指3点到5点执行
,枚举eg3,5指3点和5点执行
/增量eg3/5从第3秒开始每隔5秒执行一次
?忽略且只能在 日期域 或 星期域 只用 ③ 练习
标准格式 * * * * * ? 周一至周五的上午10:15触发
0 15 10 ? * 2-6 表示在每月的1日的凌晨2点调整任务
0 0 2 1 * ? 朝九晚五工作时间内每半小时
0 0/30 9-16 * * ? 每天上午10点下午2点4点
0 0 10,14,16 * * ? 表示每个星期三中午12点
0 0 12 ? * 4 在每天下午2点到下午2:59期间的每1分钟触发
0 /1 14-15 * * ? 在每天下午2点到下午2:05期间的每1分钟触发
0 0-5/1 14 * * ? 在每天下午2点到下午2:55期间的每5分钟触发
0 0-55/5 14 * * ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
0 0-55/5 14,18 * * ?