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

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. php strtr()函数 语法

    php strtr()函数 语法 作用:转换字符串中的某些字符直线电机生产厂家 语法:strtr(string,from,to)或者strtr(string,array) 参数: 参数 描述 stri ...

  2. Python_014(面向对象之继承)

    一.面向对象之继承 1.初始继承 引入:面向对象的三大特性:继承,多态,封装 a.继承是创建新类的一种方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类;新建的类称为派生类 ...

  3. js 和jquery

    1. js 全称 javascript 是 web客户端 运行的 解释性语言.. 2. jquery 只不过是 js 封装 简化了 ajax 和 dhtml 的 一款js 框架而已. 简单来说 Jqu ...

  4. php面试专题---7、文件及目录处理考点

    php面试专题---7.文件及目录处理考点 一.总结 一句话总结: 用脑子:基本文件操作和目录操作了解一波,不必强求 1.不断在文件hello.txt头部写入一行“Hello World”字符串,要求 ...

  5. P2239螺旋矩阵

    传送 看到这数据范围,显然咱不能暴力直接模拟(二维数组开不下,而且会T掉) 我们目前有两种选择: 1.优化暴力  走这边(jyy tql%%%) 2.数学做法 我们看一下题目中的那个矩阵 我们能不能找 ...

  6. matlab: undocumented sprintfc

    今天本想找一个类似于 R 中 paste 的 matlab 函数, 结果在 stackoverflow 上找到一个叫 sprintfc 的函数 (http://stackoverflow.com/qu ...

  7. mariadb(三)查

    -查询基本使用(条件,排序,聚合函数,分组,分页) 1)创建一个表结构然后添加数据 create table baba (id int unsigned not null auto_increment ...

  8. 在windows上使用xdmcp登陆centos,红帽linux

    使用xdmcp协议可以方便的在远端登陆linux服务器,进行一些界面的操作. 修改服务器端配置. vi /etc/gdm/custom.conf 找到下面两个标签 [security] AllowRe ...

  9. Python-位操作 ( &,|,~,^,<<,>>

    用于提高运算速度,规避算术运算符 在位操作运算中,不应该试图考虑先得到一个数的二进制码 ,而是应该将这个数看作是一个二进制码,二进制补码与整数之间是一一对应的. 诚然Python中有内置函数bin将一 ...

  10. 【FICO系列】SAP FICO模块-固定资产月结的注意点

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[FICO系列]SAP FICO模块-固定资产月 ...