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

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

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


(一)异步任务


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

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


@ServicepublicclassAsynService {
@Asyncpublicvoidasync(){
try {
Thread.sleep(3000);
System.out.println("执行结束");
        } catch (InterruptedExceptione) {
e.printStackTrace();
        }
    }
}

编写controller,调用这个服务类

@RestControllerpublicclassIndexController {
@AutowiredpublicAsynServiceasynService;
@RequestMapping("/index")
publicStringasynctask(){
asynService.async();
return"async task";
    }
}

运行后在浏览器中访问


https://link.juejin.cn/?target=http%3A%2F%2Flocalhost%3A8080%2Findex


会发现由于开启了异步,浏览器中会先输出async task,过了三秒后控制台才会输出执行结束。

(二)定时任务


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


@Scheduled和@EnableScheduling 和前面一样,@Scheduled用在需要定时执行的任务上,

@EnableScheduling用在启动类上。 首先来编写定时任务类:


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

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


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

相关文章
|
1天前
|
安全 Java 数据库连接
Spring Boot 优雅关机时异步线程安全优化
Spring Boot 优雅关机时异步线程安全优化
7 1
|
6天前
|
监控 安全 Java
Spring Boot优雅Shutdown时异步线程安全优化
Spring Boot优雅Shutdown时异步线程安全优化
|
2月前
|
Java 数据库 Spring
springboot 解耦、隔离、异步的原则以及实战
【5月更文挑战第30天】在Spring Boot中实现解耦、隔离和异步的原则,能够提升应用程序的可维护性、可扩展性和性能。下面我会先介绍这三个原则的基本概念和意义,然后通过实战示例展示如何在Spring Boot应用中应用这些原则。
44 1
|
2月前
|
监控 Java API
Spring Boot与异步任务:整合与应用场景
【4月更文挑战第29天】异步任务在现代应用程序开发中扮演着重要的角色,它们可以提高应用程序的性能和响应速度,尤其适用于处理长时间运行的任务或需要等待外部资源的场景。Spring Boot提供了强大的支持来简化异步任务的实现。
49 0
|
2月前
|
Java API 调度
springboot的异步类的介绍
【4月更文挑战第18天】FutureTask 是 Java 并发 API 中的一个实用类,它实现了 Future 接口并扩展了 Runnable,因此它可以被 ExecutorService 执行。FutureTask 通常用于包装 Callable 或 Runnable 对象,这样它们就可以提交给 ExecutorService 并获得 Future 对象,用于查询计算的状态和结果
21 1
|
2月前
|
Java Spring
SpringBoot+async异步调用接口以及几个任务同时完成和异步接口实现和调用
SpringBoot+async异步调用接口以及几个任务同时完成和异步接口实现和调用
48 0
|
2月前
|
druid Java 数据库
Spring Boot的定时任务与异步任务
Spring Boot的定时任务与异步任务
|
2月前
|
JavaScript Java API
spring boot使用异步多线程
一文讲清楚spring boot如何结合异步多线程实现文件的导出这类耗时间的操作优化以及常用的场景,了解异步思想
66 0
spring boot使用异步多线程
|
2月前
|
Java 容器
SpringBoot 异步任务处理
SpringBoot 异步任务处理
21 0
|
2月前
|
消息中间件 Java 中间件
Spring Boot异步消息之AMQP讲解及实战(附源码)
Spring Boot异步消息之AMQP讲解及实战(附源码)
129 1