zoukankan      html  css  js  c++  java
  • springboot使用异步查询数据

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

    1、开启异步调用注解

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

     1 /**
     2  * @author:YZH
     3  * time: 2019/8/8 12:16
     4  * description: 建立抽象类,定义相关方法
     5  **/
     6 public abstract class BaseAdapt<T,Base>{
     7     private Base base;
     8 
     9     public  BaseAdapt(Base base){
    10         this.base = base;
    11     }
    12 
    13     /**
    14      * 查询list数据(默认要实现)
    15      * @return
    16      */
    17     public abstract List<T>list();
    18 
    19     /**
    20      * 查询数量
    21      * @return
    22      */
    23     public  int count(){return 0;}
    24 
    25     /**
    26      * 返回单个对象V
    27      * @return
    28      */
    29     public T getT(){
    30         return null;
    31     }
    32 
    33 }
    View Code

    3、建立异步调用方法

     1 @Component
     2 public  class DemoThread {
     3 
     4 
     5     @Async
     6     public <T,Base> Future<T> getT(BaseAdapt<T,Base>baseAdapt) {
     7         return new AsyncResult<>(baseAdapt.getT());
     8     }
     9 
    10     @Async
    11     public <T,Base> Future<List<T>> list(BaseAdapt<T,Base> baseAdapt){
    12         return new AsyncResult<>(baseAdapt.list());
    13     }
    14 
    15     @Async
    16     public Future<Integer>count(BaseAdapt baseAdapt){
    17         return new AsyncResult<>(baseAdapt.count());
    18     }
    19 }
    View Code

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

     1 @Component
     2 public class UserDao {
     3 
     4     public User getUser(){
     5         User user = new User();
     6         user.setName("测试");
     7         user.setId(UUID.randomUUID().toString());
     8         return user;
     9     }
    10 
    11     public List<User>listUser(){
    12         int num = new Random(1).nextInt(10);
    13         System.out.println("随机生成:"+num+"个user");
    14         List<User>users = new ArrayList<>(num);
    15         for (int i = 0; i < num; i++) {
    16             User user = new User();
    17             user.setId(UUID.randomUUID().toString());
    18             user.setName("测试"+i);
    19             users.add(user);
    20         }
    21         return users;
    22     }
    23     public int count(){
    24         return new Random(1).nextInt(10);
    25     }
    26 }
    View Code

    5、调用

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

     1     @Test
     2     public void  testAsync() throws InstantiationException, IllegalAccessException, ExecutionException, InterruptedException {
     3         BaseAdapt<User,UserDao>baseAdapt = new BaseAdapt<User, UserDao>(userDao) {
     4             @Override
     5             public List<User> list() {
     6                 return userDao.listUser();
     7             }
     8         };
     9         Future<List<User>> list = demoThread.list(baseAdapt);
    10         Future<Integer> count = demoThread.count(baseAdapt);
    11         List<User> users = list.get();
    12         Integer integer = count.get();
    13         System.out.println("总数:"+integer);
    14         for (User user : users) {
    15             System.out.println(user);
    16         }
    17     }
    View Code

    b、新增查询数量

     1 @Test
     2     public void  testAsync() throws InstantiationException, IllegalAccessException, ExecutionException, InterruptedException {
     3         BaseAdapt<User,UserDao>baseAdapt = new BaseAdapt<User, UserDao>(userDao) {
     4             @Override
     5             public List<User> list() {
     6                 return userDao.listUser();
     7             }
     8             @Override
     9             public int count() {
    10                 return userDao.count();
    11             }
    12         };
    13         Future<List<User>> list = demoThread.list(baseAdapt);
    14         Future<Integer> count = demoThread.count(baseAdapt);
    15         List<User> users = list.get();
    16         Integer integer = count.get();
    17         System.out.println("总数:"+integer);
    18         for (User user : users) {
    19             System.out.println(user);
    20         }
    21     }
    View Code
  • 相关阅读:
    洛谷 U141580 简化罗波切问题
    洛谷 U141578 维修电路
    洛谷 U140760 狭义公因子
    CF75C Modified GCD
    算法题-求解斐波那切数列的第N个数是几?
    算法题-求N的阶乘
    JAVA8新特性
    nginx启动脚本,手动编辑
    javah生成带有包名的头文件
    Matlab图像处理(03)-基本概念
  • 原文地址:https://www.cnblogs.com/cq-yangzhou/p/11325520.html
Copyright © 2011-2022 走看看