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。

相关文章
|
druid Java 数据库
Spring Boot的定时任务与异步任务
Spring Boot的定时任务与异步任务
|
Java
springboot使用异步任务
springboot使用异步任务
140 0
|
Java 开发者 Spring
【SpringBoot 异步魔法】@Async 注解:揭秘 SpringBoot 中异步方法的终极奥秘!
【8月更文挑战第25天】异步编程对于提升软件应用的性能至关重要,尤其是在高并发环境下。Spring Boot 通过 `@Async` 注解简化了异步方法的实现。本文详细介绍了 `@Async` 的基本用法及配置步骤,并提供了示例代码展示如何在 Spring Boot 项目中创建与管理异步任务,包括自定义线程池、使用 `CompletableFuture` 处理结果及异常情况,帮助开发者更好地理解和运用这一关键特性。
1915 1
|
Java Spring 容器
Spring boot 自定义ThreadPoolTaskExecutor 线程池并进行异步操作
Spring boot 自定义ThreadPoolTaskExecutor 线程池并进行异步操作
1004 3
|
监控 Java API
Spring Boot中的异步革命:构建高性能的现代Web应用
【8月更文挑战第29天】Spring Boot 是一个简化 Spring 应用开发与部署的框架。异步任务处理通过后台线程执行耗时操作,提升用户体验和系统并发能力。要在 Spring Boot 中启用异步任务,需在配置类上添加 `@EnableAsync` 注解,并定义一个自定义的 `ThreadPoolTaskExecutor` 或使用默认线程池。通过 `@Async` 注解的方法将在异步线程中执行。异步任务适用于发送电子邮件、数据处理、外部 API 调用和定时任务等场景。最佳实践中应注意正确配置线程池、处理返回值和异常、以及监控任务状态,确保系统的稳定性和健壮性。
207 0
|
Java 开发者 Spring
Spring Boot大法好:解耦、隔离、异步,让代码‘活’起来,性能飙升的秘密武器!
【8月更文挑战第29天】解耦、隔离与异步是Spring Boot中的关键设计原则,能大幅提升软件的可维护性、扩展性和性能。本文通过示例代码详细探讨了这些原则的应用:依赖注入和面向接口编程实现解耦;模块化设计与配置文件实现隔离;`@Async`注解和`CompletableFuture`实现异步处理。综合运用这些原则,可以显著提升软件质量和性能,使系统更加健壮、灵活和高效。
225 0
|
安全 Java 数据库连接
Spring Boot 优雅关机时异步线程安全优化
Spring Boot 优雅关机时异步线程安全优化
426 1
|
Java 数据库 Spring
springboot 解耦、隔离、异步的原则以及实战
【5月更文挑战第30天】在Spring Boot中实现解耦、隔离和异步的原则,能够提升应用程序的可维护性、可扩展性和性能。下面我会先介绍这三个原则的基本概念和意义,然后通过实战示例展示如何在Spring Boot应用中应用这些原则。
200 1
|
前端开发 Java 应用服务中间件
SpringBoot异步接口怎么实现?
### 前言 Servlet 3.0以前,每个HTTP请求由单一线程全程处理;3.0版本引入异步处理,允许提前释放容器线程,提升系统吞吐量。
315 0
|
监控 安全 Java
Spring Boot优雅Shutdown时异步线程安全优化
Spring Boot优雅Shutdown时异步线程安全优化