10.异步调用
1.異步調(diào)用簡介
異步調(diào)用是相對于同步調(diào)用而言的,同步調(diào)用是指程序按預(yù)定順序一步一步執(zhí)行,每一步必須等到上一步執(zhí)行完成之后才能執(zhí)行,而異步調(diào)用則無需等待上一步程序執(zhí)行完成即可執(zhí)行。在日常開發(fā)的項(xiàng)目中,當(dāng)訪問的接口較慢或者做耗時(shí)任務(wù)時(shí),避免程序一直卡在耗時(shí)任務(wù)上,使程序能夠并行執(zhí)行,可以使用多線程來并行處理,也可以使用SpringBoot提供的異步處理方式@Async來處理。
2.引入依賴
新建一個(gè)SpringBoot工程,并在pom.xml文件中添加需要的dependency。
3.添加配置
在application.properties文件中添加如下配置信息。
4.dao層開發(fā)
首先在項(xiàng)目目錄“/src/main/java/com/leichuangkj/async”下新建“/dao/po”目錄,并在po目錄下新建User實(shí)體類,具體代碼如下。
然后在dao目錄下新建mapper目錄,并在mapper目錄下新建UserMapper接口,具體代碼如下。
@Repository public interface UserMapper {List<User> findAll(); }最后在resource目錄下新建“mybatis/mapper”目錄,并在mapper目錄下新建UserMapper.xml文件,具體代碼如下。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.leichuangkj.async.dao.mapper.UserMapper" ><resultMap id="BaseResultMap" type="com.leichuangkj.async.dao.po.User"><constructor><idArg column="id" javaType="java.lang.Integer" jdbcType="INTEGER" /><arg column="name" javaType="java.lang.String" jdbcType="VARCHAR" /><arg column="email" javaType="java.lang.String" jdbcType="VARCHAR" /></constructor></resultMap><select id="findAll" resultMap="BaseResultMap">select id, name, emailfrom user</select> </mapper>5.service層開發(fā)
在項(xiàng)目目錄“/src/main/java/com/leichuangkj/async”下新建service目錄,并在service目錄下新建IUser接口,具體代碼如下。
然后在service目錄下新建impl目錄,并在impl目錄下新建UserImpl實(shí)現(xiàn)類,具體代碼如下。
@Service public class UserImpl implements IUser {@AutowiredUserMapper userMapper;@Overridepublic List<User> findAllSync() {try {System.out.println("開始做任務(wù)");long start = System.currentTimeMillis();List<User> userList = userMapper.findAll();long end = System.currentTimeMillis();System.out.println("完成任務(wù),耗時(shí):" + (end - start)+"毫秒");return userList;}catch (Exception e){return Collections.emptyList();}}@Async@Overridepublic Future<List<User>> findAllAsync() {try {System.out.println("開始做任務(wù)");long start = System.currentTimeMillis();List<User> userList = userMapper.findAll();long end = System.currentTimeMillis();System.out.println("完成任務(wù),耗時(shí):" + (end - start)+"毫秒");return new AsyncResult<>(userList);}catch (Exception e){return new AsyncResult<>(null);}} }6.controller層開發(fā)
在項(xiàng)目目錄“/src/main/java/com/leichuangkj/async”下新建controller目錄,并在controller目錄下新建UserController類,具體代碼如下。
7.啟動(dòng)項(xiàng)目
在啟動(dòng)類MyBatisApplication上添加注解“@MapperScan(basePackages = “com.leichuangkj.async.dao.mapper”)”和“@EnableAsync(proxyTargetClass = true)”,然后啟動(dòng)項(xiàng)目。
8.測試
啟動(dòng)項(xiàng)目,然后分別在postman中請求“http://localhost:8080/user/findAllSync”和“http://localhost:8080/user/findAllAsync”,可以在控制臺看到相應(yīng)的執(zhí)行結(jié)果,測試結(jié)果如下圖所示,可以看到同步執(zhí)行三次查詢耗時(shí)為988毫秒,異步執(zhí)行三次查詢耗時(shí)772毫秒,由此可見,異步調(diào)用速度比同步調(diào)用速度快。
9.工程目錄結(jié)構(gòu)
總結(jié)
- 上一篇: 猜价格游戏购物街c语言,猜数游戏实例
- 下一篇: veryCD关闭之后,我们该何去何从。别