主要适用于需要查询多种类型的数据,而且二者的参数没有关联的情况。

1、开启异步调用注解

2、创建抽象类,定义相关方法

 /**
* @author:YZH
* time: 2019/8/8 12:16
* description: 建立抽象类,定义相关方法
**/
public abstract class BaseAdapt<T,Base>{
private Base base; public BaseAdapt(Base base){
this.base = base;
} /**
* 查询list数据(默认要实现)
* @return
*/
public abstract List<T>list(); /**
* 查询数量
* @return
*/
public int count(){return 0;} /**
* 返回单个对象V
* @return
*/
public T getT(){
return null;
} }

3、建立异步调用方法

 @Component
public class DemoThread { @Async
public <T,Base> Future<T> getT(BaseAdapt<T,Base>baseAdapt) {
return new AsyncResult<>(baseAdapt.getT());
} @Async
public <T,Base> Future<List<T>> list(BaseAdapt<T,Base> baseAdapt){
return new AsyncResult<>(baseAdapt.list());
} @Async
public Future<Integer>count(BaseAdapt baseAdapt){
return new AsyncResult<>(baseAdapt.count());
}
}

4、建立一个dao类,模拟访问数据库

 @Component
public class UserDao { public User getUser(){
User user = new User();
user.setName("测试");
user.setId(UUID.randomUUID().toString());
return user;
} public List<User>listUser(){
int num = new Random(1).nextInt(10);
System.out.println("随机生成:"+num+"个user");
List<User>users = new ArrayList<>(num);
for (int i = 0; i < num; i++) {
User user = new User();
user.setId(UUID.randomUUID().toString());
user.setName("测试"+i);
users.add(user);
}
return users;
}
public int count(){
return new Random(1).nextInt(10);
}
}

5、调用

a、只实现默认方法,获取list数据

     @Test
public void testAsync() throws InstantiationException, IllegalAccessException, ExecutionException, InterruptedException {
BaseAdapt<User,UserDao>baseAdapt = new BaseAdapt<User, UserDao>(userDao) {
@Override
public List<User> list() {
return userDao.listUser();
}
};
Future<List<User>> list = demoThread.list(baseAdapt);
Future<Integer> count = demoThread.count(baseAdapt);
List<User> users = list.get();
Integer integer = count.get();
System.out.println("总数:"+integer);
for (User user : users) {
System.out.println(user);
}
}

b、新增查询数量

 @Test
public void testAsync() throws InstantiationException, IllegalAccessException, ExecutionException, InterruptedException {
BaseAdapt<User,UserDao>baseAdapt = new BaseAdapt<User, UserDao>(userDao) {
@Override
public List<User> list() {
return userDao.listUser();
}
@Override
public int count() {
return userDao.count();
}
};
Future<List<User>> list = demoThread.list(baseAdapt);
Future<Integer> count = demoThread.count(baseAdapt);
List<User> users = list.get();
Integer integer = count.get();
System.out.println("总数:"+integer);
for (User user : users) {
System.out.println(user);
}
}

springboot使用异步查询数据的更多相关文章

  1. SpringBoot使用异步线程池实现生产环境批量数据推送

    前言 SpringBoot使用异步线程池: 1.编写线程池配置类,自定义一个线程池: 2.定义一个异步服务: 3.使用@Async注解指向定义的线程池: 这里以我工作中使用过的一个案例来做描述,我所在 ...

  2. 《Entity Framework 6 Recipes》中文翻译系列 (11) -----第三章 查询之异步查询

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第三章 查询 前一章,我们展示了常见数据库场景的建模方式,本章将向你展示如何查询实体 ...

  3. 《Entity Framework 6 Recipes》中文翻译系列 (41) ------ 第七章 使用对象服务之标识关系中使用依赖实体与异步查询保存

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-7  标识关系中使用依赖实体 问题 你想在标识关系中插入,更新和删除一个依赖实体 ...

  4. flask+sqlite3+echarts3+ajax 异步更新数据

    结构: /www | |-- /static |....|-- jquery-3.1.1.js |....|-- echarts.js(echarts3是单文件!!) | |-- /templates ...

  5. EF – 2.EF数据查询基础(上)查询数据的实用编程技巧

    目录 5.4.1 查询符合条件的单条记录 EF使用SingleOrDefault()和Find()两个方法查询符合条件的单条记录. 5.4.2 Entity Framework中的内部数据缓存 DbS ...

  6. ajax查询数据的举例

    1.根据下拉框的值异步查询信息 HTML代码如下: <script> $(function(){ //页面载入时执行 $("#key").change(function ...

  7. asp.net mvc异步查询

    对于asp.net mvc异步查询 如何做MVC异步查询,做列表页面. 查询是项目中必不可少的工作,而且不同的项目不同的团队,都有自己的简单方法.Asp.net mvc 有自己独特的优势,下面是结合m ...

  8. Android 异步查询框架AsyncQueryHandler的使用

    AsyncQueryHandler简介: 异步的查询操作帮助类,可以处理增删改(ContentProvider提供的数据) 使用场景: 在一般的应用中可以使用ContentProvider去操作数据库 ...

  9. asp.net core系列 33 EF查询数据 (2)

    一. 原生SQL查询 接着上篇讲.通过 Entity Framework Core 可以在使用关系数据库时下降到原始 SQL 查询. 在无法使用 LINQ 表达要执行的查询时,或因使用 LINQ 查询 ...

随机推荐

  1. 二叉树的下一个结点(剑指offer_8)

    题目描述 给定一个二叉树和其中一个结点,请找出中序遍历顺序的下一个结点并返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. public class TreeLinkNode { i ...

  2. 两个list 合并后去除掉重复removeAll()的,然后再随机获取最后list中的 几个值

    public static void test1(){ String s1="1,2,5,3,6,9"; String n1[]=s1.split(","); ...

  3. Linux系统下安装jenkins使用

    jenkins 2.190.1 yum 安装 devops一梦千年 发布时间:10-0916:28 jenkins 2.190.1 yum 安装记录 安装环境: 所需安装包: https://pkg. ...

  4. shell第一个脚本

    mkdir 创建目录touch 创建空文件 chmod +x ./test.sh  #使脚本具有执行权限

  5. CSS基础知识总结之css样式引用的三种方式

    在html中增加css样式有三种: 1.在标签中增加style属性: <!DOCTYPE html> <html lang="en" xmlns="ht ...

  6. UE4-PS4开发渲染线程优化方法及记录

    先说方法: Launch 到 PS4 Devkit上,在PS4上输入Stat unit 看瓶颈在哪里.我们发现Frame 和Draw数值几乎一样,其余两项相对较小,这表明瓶颈在渲染线程上. 关于渲染线 ...

  7. Nginx 禁止IP访问 只允许域名访问

    今天要在Nginx上设置禁止通过IP访问服务器,只能通过域名访问,这样做是为了避免别人把未备案的域名解析到自己的服务器IP而导致服务器被断网,从网络上搜到以下解决方案: Nginx的默认虚拟主机在用户 ...

  8. 新建 SecondPresenter 实现类

    package com.test.mvp.mvpdemo.mvp.v6.presenter; import com.test.mvp.mvpdemo.mvp.v6.SecondContract;imp ...

  9. JAVA一切皆对象之包装类、自动装箱、自动拆箱

    首先封装一个基本数据类型int, class P{ private int number; //封装一个私有的->基本数据类型 public P(){} public P(int number) ...

  10. 1207D Number Of Permutations

    题目大意 给你n个二元组 问你有几种排列是的按两个关键字中的任意一个都不是不降排列的 分析 不妨容斥 我们先加上总的方案数$n!$ 之后我们按第一个关键字排序 因为值相同的情况下不影响答案 所以让总方 ...