当前位置: 首页 > news >正文

SpringBoot如何实现异步、定时任务?

点赞再看,养成习惯,听说微信搜公众号《Java鱼仔》会让自己的技术更上一层楼

(一)异步任务

异步任务的需求在实际开发场景中经常遇到,Java实现异步的方式有很多,比如多线程实现异步。在SpringBoot中,实现异步任务只需要增加两个注解就可以实现。当前类添加@Async注解,启动类添加@EnableAsync

编写一个service,AsynService,让这个服务暂停3秒后再输出数据

@Service
public class AsynService {
    @Async
    public void async(){
        try {
            Thread.sleep(3000);
            System.out.println("执行结束");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

编写controller,调用这个服务类

@RestController
public class IndexController {
    @Autowired
    public AsynService asynService;
    @RequestMapping("/index")
    public String  asynctask(){
        asynService.async();
        return "async task";
    }
}

运行后在浏览器中访问http://localhost:8080/index ,会发现由于开启了异步,浏览器中会先输出async task,过了三秒后控制台才会输出执行结束。

(二)定时任务

我在之前的秒杀开源项目中已经使用过定时任务,当时的场景时,每隔1分钟去轮询数据库查询过期的商品。定时任务的应用范围很广,比如每天12点自动打包日志,每天晚上12点备份等等。
在SpringBoot实现定时任务也只需要两个注解:@Scheduled和@EnableScheduling
和前面一样,@Scheduled用在需要定时执行的任务上,@EnableScheduling用在启动类上。
首先来编写定时任务类:

@Service
public class ScheduleService {

    @Scheduled(cron = "0/10 * * * * ? ")
    public void sayHello(){
        System.out.println("hello");
    }
}

@Scheduled注解中需要加入cron表达式,用来判断定时任务的执行时间,这里表示每10秒执行一次。

然后在启动类中加上注解@EnableScheduling。
运行项目,会发现每隔十秒会输出一条hello。

相关文章:

  • Java中BIO、NIO、AIO 有什么区别?
  • 网络协议系列之二:HTTP(2)
  • redis和mysql数据不一致问题如何解决?
  • Spring中的资源加载策略
  • 你知道迭代器 Iterator 是什么吗?
  • 什么是乐观锁、什么是悲观锁,两种锁在Java中的具体应用场景有哪些
  • Error: Out of memory! attempting SFTP connectio
  • 谈一谈session和cookie的区别,以及session的实现机制
  • Android--activity获取返回值
  • 你能说出四种创建线程的方式吗?
  • IOS 多线程01-线程基础知识
  • 说一下runnable 和 callable 有什么区别?Future是什么?
  • Spring MVC 3.0 深入及对注解的详细讲解
  • 线程的 run()和 start()有什么区别?sleep() 和 wait() 有什么区别?
  • 你对线程池的了解有多少?知道为什么阿里不让用Java提供的线程池吗?
  • 【EOS】Cleos基础
  • KMP算法及优化
  • Linux下的乱码问题
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 人脸识别最新开发经验demo
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 深度学习中的信息论知识详解
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 详解移动APP与web APP的区别
  • postgresql行列转换函数
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • ​VRRP 虚拟路由冗余协议(华为)
  • # 安徽锐锋科技IDMS系统简介
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (02)vite环境变量配置
  • (poj1.2.1)1970(筛选法模拟)
  • (pojstep1.3.1)1017(构造法模拟)
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (转)linux下的时间函数使用
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET Framework与.NET Framework SDK有什么不同?
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NET单元测试
  • .net开发引用程序集提示没有强名称的解决办法
  • @Mapper作用
  • []C/C++读取串口接收到的数据程序
  • []sim300 GPRS数据收发程序
  • [ACTF2020 新生赛]Include
  • [C语言][C++][时间复杂度详解分析]二分查找——杨氏矩阵查找数字详解!!!
  • [DNS网络] 网页无法打开、显示不全、加载卡顿缓慢 | 解决方案
  • [Hadoop in China 2011] Hadoop之上 中国移动“大云”系统解析
  • [IE技巧] 如何关闭Windows Server版IE的安全限制
  • [objective-c]关于KVC--KVO--KVB