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 查询 ...
随机推荐
- 吐血整理 | 1000行MySQL学习笔记,不怕你不会,就怕你不学!
/ Windows服务 / / 连接与断开服务器 / / 数据库操作 / ------------------ / 表的操作 / ------------------ / 数据操作 / ------- ...
- spring boot整合WebSocket示例
1.运行环境 开发工具:intellij idea JDK版本:1.8 项目管理工具:Maven 4.0.0 2.GITHUB地址 https://github.com/nbfujx/springBo ...
- PHPcms编辑器如何粘贴带格式的word文档
在之前在工作中遇到在富文本编辑器中粘贴图片不能展示的问题,于是各种网上扒拉,终于找到解决方案,在这里感谢一下知乎中众大神以及TheViper. 通过知乎提供的思路找到粘贴的原理,通过TheViper找 ...
- Unregistering JMX-exposed beans on shutdown解决方法:
Unregistering JMX-exposed beans on shutdown解决方法: 加入依赖如下: <dependency> <groupId>org.spr ...
- sql-hive笔试题整理 1 (学生表-成绩表-课程表-教师表)
题记:一直在写各种sql查询语句,最长的有一百多行,自信什么需求都可以接,可......,想了想,可能一直在固定的场景下写,平时也是以满足实际需求为目的,竟不知道应试的题都是怎么出的,又应该怎么做.遂 ...
- field.getModifiers() 返回值
field.getModifiers() 返回值 public static final 的值是 25 private 的值是2 测试如下 Class clazz=MyModel.class; F ...
- 【已转移】【Java架构:系统架构理论】一篇文章搞掂:RESTful
一.定义 1.起源 来源:Roy Fielding的博士论文. 目的:理解和评估以网络为基础的应用软件的架构设计,得到一个功能强.性能好.适宜通信的架构. 定义:一种实现软件通信的架构风格.设计风格, ...
- Oracle 数据库优化
Oracle 数据库优化 参考网址
- groub by 与 over partition by 的区别
这个逻辑,写的很对.明白了这个意思. over partition by 前面一定要用汇总函数.groub by 就可以不用.本质都是汇总 SELECT a.* ,SUM(a.audit_status ...
- poj1182食物链(三类并查集)
动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种. 有人用两种 ...