springboot使用异步查询数据
主要适用于需要查询多种类型的数据,而且二者的参数没有关联的情况。
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使用异步查询数据的更多相关文章
- SpringBoot使用异步线程池实现生产环境批量数据推送
前言 SpringBoot使用异步线程池: 1.编写线程池配置类,自定义一个线程池: 2.定义一个异步服务: 3.使用@Async注解指向定义的线程池: 这里以我工作中使用过的一个案例来做描述,我所在 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (11) -----第三章 查询之异步查询
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第三章 查询 前一章,我们展示了常见数据库场景的建模方式,本章将向你展示如何查询实体 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (41) ------ 第七章 使用对象服务之标识关系中使用依赖实体与异步查询保存
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-7 标识关系中使用依赖实体 问题 你想在标识关系中插入,更新和删除一个依赖实体 ...
- flask+sqlite3+echarts3+ajax 异步更新数据
结构: /www | |-- /static |....|-- jquery-3.1.1.js |....|-- echarts.js(echarts3是单文件!!) | |-- /templates ...
- EF – 2.EF数据查询基础(上)查询数据的实用编程技巧
目录 5.4.1 查询符合条件的单条记录 EF使用SingleOrDefault()和Find()两个方法查询符合条件的单条记录. 5.4.2 Entity Framework中的内部数据缓存 DbS ...
- ajax查询数据的举例
1.根据下拉框的值异步查询信息 HTML代码如下: <script> $(function(){ //页面载入时执行 $("#key").change(function ...
- asp.net mvc异步查询
对于asp.net mvc异步查询 如何做MVC异步查询,做列表页面. 查询是项目中必不可少的工作,而且不同的项目不同的团队,都有自己的简单方法.Asp.net mvc 有自己独特的优势,下面是结合m ...
- Android 异步查询框架AsyncQueryHandler的使用
AsyncQueryHandler简介: 异步的查询操作帮助类,可以处理增删改(ContentProvider提供的数据) 使用场景: 在一般的应用中可以使用ContentProvider去操作数据库 ...
- asp.net core系列 33 EF查询数据 (2)
一. 原生SQL查询 接着上篇讲.通过 Entity Framework Core 可以在使用关系数据库时下降到原始 SQL 查询. 在无法使用 LINQ 表达要执行的查询时,或因使用 LINQ 查询 ...
随机推荐
- 英语单词Obsolete
Obsolete 来源——命令帮助 [root@centos73 ~]# help typeset typeset: typeset [-aAfFgilrtux] [-p] name[=value] ...
- 十一、atomic、async深入
一.原子操作 g++; g+=1; g = g+1;//结果不对 一般原子操作针对++,--,+=,&=,|=,^=是支持的,其他的可能不支持 二.std::async深入 用来创建异步任务. ...
- web css
CSS圆角——透明圆角化背景图片 序言:第一章中我介绍了最基本的纯CSS圆角框的实现原理,并给出Demo,在本章中会对上一个模型作一些新的创新,实现将背景图片透明圆角化.并给出一些漂亮的通用演示效果. ...
- [CSP-S模拟测试]:count(树分块)
题目描述 李华终于逃离了无尽的英语作文,重获自由的他对一棵树产生了兴趣.首先,他想知道一棵树是否能分成大小相同的几块(即切掉一些边,使得每个连通块的点数相同).然后,他觉得这个问题过于简单,于是他想知 ...
- php面试专题---MySQL常用SQL语句优化
php面试专题---MySQL常用SQL语句优化 一.总结 一句话总结: 原理,万变不离其宗:其实SQL语句优化的过程中,无非就是对mysql的执行计划理解,以及B+树索引的理解,其实只要我们理解执行 ...
- loj#2334 「JOI 2017 Final」JOIOI 王国
分析 二分答案 判断左上角是否满足 为了覆盖所有范围 我们依次把右下角,左上角,右上角移动到左上角 代码 #include<bits/stdc++.h> using namespace s ...
- python tensorflow windows环境搭建体验
1. 需先安装python3.7,anaconda包管理器(类似java的maven),tensorflow,pycharm开发工具.文末附件下载地址. 2. 安装tensorflow,开始-Anac ...
- ElasticSearch2.2.0安装
一.ElasticSearch2.2.0安装 1.下载ElasticSearch2.2.0安装包 https://download.elastic.co/elasticsearch/elasticse ...
- 第 2 章 前端基础之CSS
一.CSS语法 CSS规则由两个主要的部分构成:选择器,以及一条或多条声明. ''' selector { property: value; property: value; ... property ...
- vcsa6.5安装部署配置(vSphere vsan 6.5)
首先您最好先了解下vcenter和vcsa是啥:VMware Vsphere 几个不同的组件 esxi是在物理服务器安装的服务端,所有虚拟机是安装再esxi里面的,是服务端:vcenter是管理端 是 ...