SpringBoot中定时任务与异步定时任务的实现
场景
若依前后端分离版手把手教你本地搭建环境并运行项目:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108465662
在上面实现项目搭建的基础上,怎样在SpringBoot中实现定时任务与异步定时任务实现。
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
定时任务实现
新建一个类,类上添加
@Component
@EnableScheduling
注解开启定时任务支持。
然后类中新建方法,使用
@Scheduled(fixedRateString = "1000")
来标识定时任务执行的方法。
这里使用fixedRateString是因为这样可以通过
@Scheduled(fixedRateString = "${scheduled.WebRedisPT}")
这种类似的方式可以从配置文件中读取配置的定时任务执行的频率。
然后不使用cron表达式方式执行定时任务方法,是因为这样可以设置定时任务的方法
在一秒内执行多次,这里是1000代表一秒执行1次,如果是500则代表一秒执行2次。
示例代码
package com.ruoyi.web.asyncTask;import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;import java.text.SimpleDateFormat;@Component
@EnableScheduling
public class TaskDemo {private SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSS");@Scheduled(fixedRateString = "1000")public void taskOne() {System.out.println("任务1执行开始时间"+ dateFormat.format(System.currentTimeMillis()));System.out.println("公众号:霸道的程序猿");System.out.println("任务1执行结束时间"+ dateFormat.format(System.currentTimeMillis()));}}
执行效果
异步定时任务执行
当一个系统中需要执行的定时任务比较多且每个任务执行的频率比较快时,如果还是用上面那种方式去实现所有定时任务的话,就会出现线程拥堵、定时任务在指定的时间内执行不完的情况,这时候就得需要异步任务的执行。
首先新建一个配置类来开启异步定时任务的支持
package com.ruoyi.web.config;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;@Configuration
@EnableAsync
public class ExecutorConfig {private static final Logger logger = LoggerFactory.getLogger(ExecutorConfig.class);@Beanpublic Executor asyncServiceExecutor() {logger.info("start asyncServiceExecutor");ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();//配置核心线程数executor.setCorePoolSize(32);//配置最大线程数executor.setMaxPoolSize(60);//配置队列大小executor.setQueueCapacity(99999);//配置线程池中的线程的名称前缀executor.setThreadNamePrefix("async-service-");// rejection-policy:当pool已经达到max size的时候,如何处理新任务// CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());//执行初始化executor.initialize();return executor;}
}
这里的核心线程数和最大线程数根据自己业务需要和服务器配置自行修改。
然后再新建一个定时任务执行类,除了添加
@Component
@EnableScheduling
在类上以及添加
@Scheduled(fixedRateString = "500")
还要在方法上添加
@Async("asyncServiceExecutor")
开始异步定时任务的支持
完整示例代码
package com.ruoyi.web.asyncTask;import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;@Component
@EnableScheduling
public class asyncTaskDemo {@Scheduled(fixedRateString = "500")@Async("asyncServiceExecutor")public void taskOne() {System.out.println("异步定时任务执行");}
}
SpringBoot中定时任务与异步定时任务的实现相关推荐
- java quartz管理,SpringBoot中使用Quartz管理定时任务的方法
定时任务在系统中用到的地方很多,例如每晚凌晨的数据备份,每小时获取第三方平台的 Token 信息等等,之前我们都是在项目中规定这个定时任务什么时候启动,到时间了便会自己启动,那么我们想要停止这个定时任 ...
- 面试官 | SpringBoot 中如何实现异步请求和异步调用?
作者 | 会炼钢的小白龙 来源 | cnblogs.com/baixianlong/p/10661591.html 一.SpringBoot中异步请求的使用 1.异步请求与同步请求 特点: 可以先释放 ...
- 在SpringBoot中优雅的实现定时任务
在日常的项目开发中,往往会涉及到一些需要做到定时执行的代码,例如自动将超过24小时的未付款的单改为取消状态,自动将超过14天客户未签收的订单改为已签收状态等等,那么为了在Spring Boot中实现此 ...
- SpringBoot中使用定时器/开启定时任务
1.启动类上添加@EnableScheduling注解 2.新建定时任务具体实现类 @Component public class RemindTime{//每隔10秒执行一次@Scheduled(c ...
- SpringBoot中的定时任务的同步与异步
SpringBoot中的定时任务的同步与异步你确定真的知道? 授人以渔 Java领域;架构知识;面试心得;互联网行业最新资讯 定时任务调度功能在我们的开发中是非常常见的,随便举几个例子:定时清除一些过 ...
- springboot定时发送短信_spring boot 1.5.4 定时任务和异步调用(十)
1Spring Boot定时任务和异步调用 我们在编写Spring Boot应用中经常会遇到这样的场景,比如:我需要定时地发送一些短信.邮件之类的操作,也可能会定时地检查和监控一些标志.参数等. sp ...
- hutool的定时任务不支持依赖注入怎么办_可调度定时任务在SpringBoot中的实践
定时任务在我们的项目中或多或少都会使用到,不论你是初级程序员,还是有多年工作经验的中高级程序员,在项目中加一个定时任务去处理业务的一个aspect,为什么用了一个英文单词'aspect'?而不是'切面 ...
- springBoot中使用定时任务
简单示例 导入依赖 springBoot已经默认集成了定时任务的依赖,只需要引入基本的依赖就可以使用定时任务. <parent><groupId>org.springframe ...
- spring boot 1.5.4 定时任务和异步调用(十)
1 Spring Boot定时任务和异步调用 我们在编写Spring Boot应用中经常会遇到这样的场景,比如:我需要定时地发送一些短信.邮件之类的操作,也可能会定时地检查和监控一些标志.参 ...
最新文章
- RGBD相机参数输出定义
- 计算机专业英语06章在线测试,《计算机专业英语》第06章在线测试.doc
- 剑指 offer 链表倒数的第k个数
- 全程图解:Centos 5.2 下 ORACLE10G 安装配置
- NLP论文 -《Distributed Representations of Sentences and Documents》-句子和文档的分布式表示学习
- 自定义初学5——自定义View显示图片
- linux中间人攻击工具,[web安全]使用ARPspoof进行中间人(MiTM)攻击
- xdf文件转换成pdf_PDF文件转换成PPT演示文稿教程
- 快速排序时间复杂度数学证明
- layui请求加token_琴海森林 JFinal-layui 文档、资料、学习、API,token验证
- ubuntu 黑体_Ubuntu 7.10 黑体解决方案
- python将两个csv文件按列合并
- 项目:私“图”定制——利用ffmpeg制作Gif
- 用python获取tushare数据并存入mysql数据库(一)股票列表
- C# 提取Word文档中的图片(用Spire)
- python在遥感中的应用_Python在遥感中的应用——导言
- slim的train
- linux中用c语言编写一个经纬度转换大地坐标
- 养猪还是养羊,刀杀还是电击?
- 内部局域网怎么测试带宽_通信老鸟手把手教你,怎么纯正地测网速。没有瞎七倒八的套路
热门文章
- java开关用法_如何在Java中使用带开关盒的枚举?
- spring bean的生命周期和创建流程
- 获取客户端IP和MAC地址
- linux通过ftp自动上传文件到服务器,Linux系统通过FTP上传文件到云服务器
- php去掉两个数组重复数据,php两个数组怎么去除重复
- vmware虚拟机不识别usb设备
- apache php 调优_Apache的性能优化(二)
- vue修改计算属性的值_八.Vue计算属性
- 包含数字和指定字符的正则表达式_Excel公式练习39: 求字符串中的数字组成的数能够被指定数整除的数的个数...
- Oracle拆分字符串及排序,Oracle 字符串查询以及拆分函数