SpringBoot第十八篇:异步任务
作者:追梦1819
原文:https://www.cnblogs.com/yanfei1819/p/11095891.html
版权声明:本文为博主原创文章,转载请附上博文链接!
## 引言
系统中的异步任务有很多优点,例如:1)I/O受限等情况下,异步能提;2)增强系统的健壮性;3)改善用户体验。
但是也有一些缺点,例如:1)如果滥用的话会影响系统的性能;2)相对于同步编程来说,增加编程的难度。
本章不对异步任务的优缺点做过多的详解,是否需要使用异步任务,要根据系统的业务来决定。本章只阐述 SpringBoot 中的异步任务。
版本信息
JDK:1.8
SpringBoot :2.1.4.RELEASE
maven:3.3.9
IDEA:2019.1.1
异步任务使用
关于异步任务的使用,结果的展示可能不是很明显。我们先创建几个常规的方法,然后再使之异步,看看两者结果的区别。
先创建一个项目,引入 web 的 maven 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
然后创建几个常用的方法:
package com.yanfei1819.asynctaskdemo.task;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
/**
* Created by 追梦1819 on 2019-06-21.
*/
@Component
public class AsyncTask {
public void task01() throws InterruptedException {
Long start = System.currentTimeMillis();
System.out.println("这是第一个异步任务!");
Thread.sleep(2000);
Long end = System.currentTimeMillis();
System.out.println("第一个任务执行时间是:"+(end-start));
}
public void task02() throws InterruptedException {
Long start = System.currentTimeMillis();
System.out.println("这是第二个异步任务!");
Thread.sleep(3000);
Long end = System.currentTimeMillis();
System.out.println("第二个任务执行时间是:"+(end-start));
}
public void task03() throws InterruptedException {
Long start = System.currentTimeMillis();
System.out.println("这是第三个异步任务!");
Thread.sleep(4000);
Long end = System.currentTimeMillis();
System.out.println("第三个任务执行时间是:"+(end-start));
}
}
下面创建一个测试类:
package com.yanfei1819.asynctaskdemo.web.controller;
import com.yanfei1819.asynctaskdemo.task.AsyncTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* Created by 追梦1819 on 2019-06-21.
*/
@RestController
public class TaskController {
@Autowired
private AsyncTask asyncTask;
@GetMapping("/testTask")
public void testTask() throws InterruptedException {
Long start = System.currentTimeMillis();
asyncTask.task01();
asyncTask.task02();
asyncTask.task03();
Long end = System.currentTimeMillis();
System.out.println("三个任务执行总时间是:"+(end-start));
}
}
最后启动项目,访问 localhost:8080/testTask
,结果如下:
很明显这是很常规的同步方法。下面我们使用 SpringBoot 自带的异步方法实现方式作异步处理。
需要改动的地方有两处:
- 在启动类的中加注解
@EnableAsync
; - 在异步的方法上加注解
@Async
。
重启项目,访问同一个路径,以下是结果:
总结
异步任务的使用跟其他的用法一样很简单,SpringBoot 也将其集成到 Spring 生态圈中,只需要使用其中的几个注解即可。后续将分析其原理。
SpringBoot第十八篇:异步任务的更多相关文章
- Python之路【第十八篇】:Web框架们
Python之路[第十八篇]:Web框架们 Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Pytho ...
- SpringBoot第二十四篇:应用监控之Admin
作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/11457867.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言 前一章(S ...
- Egret入门学习日记 --- 第十八篇(书中 8.5~8.7 节 内容)
第十八篇(书中 8.5~8.7 节 内容) 其实语法篇,我感觉没必要写录入到日记里. 我也犹豫了好久,到底要不要录入. 这样,我先读一遍语法篇的所有内容,我觉得值得留下的,我就录入日记里. 不然像昨天 ...
- SpringBoot第十五篇:swagger构建优雅文档
作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/11007470.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言 前面的十四 ...
- Android UI开发第二十八篇——Fragment中使用左右滑动菜单
Fragment实现了Android UI的分片管理,尤其在平板开发中,好处多多.这一篇将借助Android UI开发第二十六篇——Fragment间的通信. Android UI开发第二十七篇——实 ...
- SpringBoot非官方教程 | 第十八篇: 定时任务(Scheduling Tasks)
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot18-scheduling/ 本文出自方志朋的博客 ...
- Python开发【第十八篇】Web框架之Django【基础篇】
一.简介 Python下有许多款不同的 Web 框架,Django 是重量级选手中最有代表性的一位,许多成功的网站和APP都基于 Django. Django 是一个开放源代码的Web应用框架,由 P ...
- 第十八篇 ANDROID的声音管理系统及服务
声音管理系统用来实现声音的输入和输出.声音的控制和路由等功能,包括主和各种音源的音量调节.声音焦点控制,声音外设的检测和状态管理,声音源输入和输出的策略管理.音效的播放.音轨设置和播放.录音设置 ...
- Python全栈开发之路 【第十八篇】:Ajax技术
Ajax技术 Ajax = 异步 JavaScript 和 XML. Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 1.jQuery的load()方法 jQuery loa ...
随机推荐
- Elasticsearch(ES) 下载&安装
欢迎关注笔者的公众号: 小哈学Java, 每日推送 Java 领域干货文章,关注即免费无套路附送 100G 海量学习.面试资源哟!! 个人网站: https://www.exception.site/ ...
- dedecms5.7的获取本文章的TAG
tag调用标签如下: {dede:tag row='10' getall='1' sort='month'} <li><a href='[field:link/]'>[fiel ...
- Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'jdbc.username' in string value "${jdbc.username}"
1.启动dubbo的引用dubbo服务时候报下面这个错误,这是由于去找dubbo的发布服务未找到报的错误,所以先启动dubbo的发布服务即可. [INFO] Scanning for projects ...
- Linux存储管理
一.存储基础知识 从工作原理区分: 机械 HDD 固态 SSD SSD的优势: SSD是摒弃传统磁介质,采用电子存储介质进行数据存储和读取的一种技术,突破了传统机械硬盘的性能瓶颈,拥有极高的存储性能, ...
- 基于JQuery可拖动列表格插件DataTables的踩坑记
前言 最近项目中在使用能够拖动列调整列位置顺序的表格插件---DataTables,这也是目前我找到的唯一一种存在有这种功能的插件. 在查找使用方法的过程中发现可用案例并不多,且大多言语不详.本文将全 ...
- Qt 连接MySQL
工程文件 QT += sql 举例 QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName(&q ...
- 替换 Docker 或 Laradock 中 Debian 系统镜像源解决软件安装问题
Docker Debian 镜像源替换 因多数默认的 Docker 镜像为国外的,而采用的镜像源也是国外的,故访问很慢,所以我们需要替换为国内的(比如阿里云或163等). 163 - Debian A ...
- java 反射基本认识
java 反射基本认识 最近重新复习java反射的知识,有了新的理解. class类? 在面向对象中,万事万物皆对象.类也是个对象,是java.lang.class类的实例对象. public cla ...
- 项目进程中input的onblur事件挂不上去,失效问题解决记录
一开始直接在js文件中写 var n=document.querySelector("input"); n.onblur=funcition(){ ///事件过程吧啦啦啦 }; 事 ...
- win10无法在桌面右键快捷打开个性化设置、显示设置,在任务栏右键无法快捷打开任务栏设置
Win+R,输入regedit,定位到HKEY_CURRENT_USER\Software\Classes\ 找到列表中的ms-settings 将其删除即可解决! 转自百度知道