SpringBoot2如何使用定时任务和异步任务
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章给大家分享的是有关SpringBoot2如何使用定时任务和异步任务的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、定时任务1、基本概念按照指定时间执行的程序。2、
千家信息网最后更新 2025年11月07日SpringBoot2如何使用定时任务和异步任务
这篇文章给大家分享的是有关SpringBoot2如何使用定时任务和异步任务的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
一、定时任务
1、基本概念
按照指定时间执行的程序。
2、使用场景
数据分析数据清理系统服务监控
二、同步和异步
1、基本概念
同步调用
程序按照代码顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行;
异步调用
顺序执行时,不等待异步调用的代码块返回结果就执行后面的程序。
2、使用场景
短信通知邮件发送批量数据入缓存
三、SpringBoot2使用定时器
1、定时器执行规则注解
@Scheduled(fixedRate = 5000) :上一次开始执行时间点之后5秒再执行@Scheduled(fixedDelay = 5000) :上一次执行完毕时间点之后5秒再执行@Scheduled(initialDelay=1000, fixedRate=5000) :第一次延迟1秒后执行,之后按fixedRate的规则每5秒执行一次@Scheduled(cron="/5") :通过cron表达式定义规则
2、定义时间打印定时器
import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Component;import java.text.SimpleDateFormat;import java.util.Date;/** * 时间定时任务 */@Componentpublic class TimeTask { Logger LOG = LoggerFactory.getLogger(TimeTask.class.getName()) ; private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ; /** * 每3秒打印一次系统时间 */ @Scheduled(fixedDelay = 3000) public void systemDate (){ LOG.info("当前时间::::"+format.format(new Date())); }}3、启动类开启定时器注解
@EnableScheduling // 启用定时任务@SpringBootApplicationpublic class TaskApplication { public static void main(String[] args) { SpringApplication.run(TaskApplication.class,args) ; }}四、SpringBoot2.0使用异步任务
1、编写异步任务类
import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.scheduling.annotation.Async;import org.springframework.stereotype.Component;@Componentpublic class AsyncTask { private static final Logger LOGGER = LoggerFactory.getLogger(AsyncTask.class) ; /* * [ asyncTask1-2] com.boot.task.config.AsyncTask : ======异步任务结束1====== * [ asyncTask1-1] com.boot.task.config.AsyncTask : ======异步任务结束0====== */ // 只配置了一个 asyncExecutor1 不指定也会默认使用 @Async public void asyncTask0 () { try{ Thread.sleep(5000); }catch (Exception e){ e.printStackTrace(); } LOGGER.info("======异步任务结束0======"); } @Async("asyncExecutor1") public void asyncTask1 () { try{ Thread.sleep(5000); }catch (Exception e){ e.printStackTrace(); } LOGGER.info("======异步任务结束1======"); }}2、指定异步任务执行的线程池
这里可以不指定,指定执行的线城池,可以更加方便的监控和管理异步任务的执行。
import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;import java.util.concurrent.Executor;import java.util.concurrent.ThreadPoolExecutor;/** * 定义异步任务执行的线程池 */@Configurationpublic class TaskPoolConfig { @Bean("asyncExecutor1") public Executor taskExecutor1 () { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); // 核心线程数10:线程池创建时候初始化的线程数 executor.setCorePoolSize(10); // 最大线程数20:线程池最大的线程数,只有在缓冲队列满了之后才会申请超过核心线程数的线程 executor.setMaxPoolSize(20); // 缓冲队列200:用来缓冲执行任务的队列 executor.setQueueCapacity(200); // 允许线程的空闲时间60秒:当超过了核心线程出之外的线程在空闲时间到达之后会被销毁 executor.setKeepAliveSeconds(60); // 线程池名的前缀:设置好了之后可以方便定位处理任务所在的线程池 executor.setThreadNamePrefix("asyncTask1-"); /* 线程池对拒绝任务的处理策略:这里采用了CallerRunsPolicy策略, 当线程池没有处理能力的时候,该策略会直接在 execute 方法的调用线程中运行被拒绝的任务; 如果执行程序已关闭,则会丢弃该任务 */ executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); // 设置线程池关闭的时候等待所有任务都完成再继续销毁其他的Bean executor.setWaitForTasksToCompleteOnShutdown(true); // 设置线程池中任务的等待时间,如果超过这个时候还没有销毁就强制销毁,以确保应用最后能够被关闭,而不是阻塞住。 executor.setAwaitTerminationSeconds(600); return executor; }}3、启动类添加异步注解
@EnableAsync // 启用异步任务@SpringBootApplicationpublic class TaskApplication { public static void main(String[] args) { SpringApplication.run(TaskApplication.class,args) ; }}4、异步调用的测试接口
@RestControllerpublic class TaskController { @Resource private AsyncTask asyncTask ; @RequestMapping("/asyncTask") public String asyncTask (){ asyncTask.asyncTask0(); asyncTask.asyncTask1(); return "success" ; }}感谢各位的阅读!关于"SpringBoot2如何使用定时任务和异步任务"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
任务
线程
时间
程序
定时器
时候
数据
核心
注解
策略
规则
队列
处理
缓冲
最大
一行
代码
内容
场景
更多
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
陕西人口数据库
广东尚睿网络技术怎么样
访问网页需要打开服务器什么端口
保山公安网络安全
开办网课软件开发需求
二十大网络安全标语
软件开发选择语言
服务器管理器打开iso镜像
数据库设计发展
两台虚拟机共用数据库
山西软件开发解决方案推荐
服务器设备名称
郑州网络技术基础课程试卷
网络安全行业的分销体系
服务器盘点
汽车为什么发展网络技术
滁州回收服务器最新价格
建立网络安全预警机制
维护网络安全三个必须
戴尔服务器r720风扇声音很大
水果采摘机器人数据库通信
人脸数据库常用连接
网络安全应急预案培训
讲学校专业的软件开发人员
全国31省最新疫情通报数据库
网络安全改变世界
安卓点名软件开发完整代码
网络安全守护者于丁
我的世界服务器组队
北京梦通力互联网科技有限公司