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 查询 ...
随机推荐
- 二叉树的下一个结点(剑指offer_8)
题目描述 给定一个二叉树和其中一个结点,请找出中序遍历顺序的下一个结点并返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. public class TreeLinkNode { i ...
- 两个list 合并后去除掉重复removeAll()的,然后再随机获取最后list中的 几个值
public static void test1(){ String s1="1,2,5,3,6,9"; String n1[]=s1.split(","); ...
- Linux系统下安装jenkins使用
jenkins 2.190.1 yum 安装 devops一梦千年 发布时间:10-0916:28 jenkins 2.190.1 yum 安装记录 安装环境: 所需安装包: https://pkg. ...
- shell第一个脚本
mkdir 创建目录touch 创建空文件 chmod +x ./test.sh #使脚本具有执行权限
- CSS基础知识总结之css样式引用的三种方式
在html中增加css样式有三种: 1.在标签中增加style属性: <!DOCTYPE html> <html lang="en" xmlns="ht ...
- UE4-PS4开发渲染线程优化方法及记录
先说方法: Launch 到 PS4 Devkit上,在PS4上输入Stat unit 看瓶颈在哪里.我们发现Frame 和Draw数值几乎一样,其余两项相对较小,这表明瓶颈在渲染线程上. 关于渲染线 ...
- Nginx 禁止IP访问 只允许域名访问
今天要在Nginx上设置禁止通过IP访问服务器,只能通过域名访问,这样做是为了避免别人把未备案的域名解析到自己的服务器IP而导致服务器被断网,从网络上搜到以下解决方案: Nginx的默认虚拟主机在用户 ...
- 新建 SecondPresenter 实现类
package com.test.mvp.mvpdemo.mvp.v6.presenter; import com.test.mvp.mvpdemo.mvp.v6.SecondContract;imp ...
- JAVA一切皆对象之包装类、自动装箱、自动拆箱
首先封装一个基本数据类型int, class P{ private int number; //封装一个私有的->基本数据类型 public P(){} public P(int number) ...
- 1207D Number Of Permutations
题目大意 给你n个二元组 问你有几种排列是的按两个关键字中的任意一个都不是不降排列的 分析 不妨容斥 我们先加上总的方案数$n!$ 之后我们按第一个关键字排序 因为值相同的情况下不影响答案 所以让总方 ...