一般我们写Java程序,都是同步去执行的。但是当遇到一个方法中有多个特别耗时的SQL查询,这时候我们就得等一个个sql慢慢执行完,比如一个SQL查询2秒,3个就是6秒,这个就不是我们想要的呢。那怎么解决呢?第一优化你的SQL;第二优化你的程序。
本篇文章主要介绍的是优化你的程序,我们可以将同步的SQL查询改为异步的SQL查询。具体如何操作,我就直接贴代码了:
text
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
CompletableFuture<List> firstFuture = CompletableFuture.supplyAsync(() -> {
try {
Map<String, Object> paramsMap = new HashMap<>();
//TODO 设置参数 因是异步执行 要保持参数一直
paramsMap.put("XX", "XX");
...
...
//数据库查询
return xxxMapper.selectXXXByParams(paramsMap);
} catch (Exception e) {
e.printStackTrace();
}
return null;
});
CompletableFuture<List> secondFuture = CompletableFuture.supplyAsync(() -> {
try {
Map<String, Object> paramsMap = new HashMap<>();
//TODO 设置参数 因是异步执行 要保持参数一直
paramsMap.put("XX", "XX");
...
...
//数据库查询
return xxxMapper.selectXXXByParams(paramsMap);
} catch (Exception e) {
e.printStackTrace();
}
return null;
});
//有几个查询写几个
...
...
//接收异步查询的结果
CompletableFuture.allOf(firstFuture, secondFuture, ...).join();
List<Object> firstResult = firstFuture.get();
List<Object> secondResult = secondFuture.get();
...
...
上面代码就是异步查询数据库的核心代码,因为是异步执行,要注意参数的一致性(原子性)。
改为异步你会发现多个长耗时的SQL异步去执行,大大减少了程序等待的时间,提升了响应。
上面只是个人理解,如有不正或者更好的方法,请麻烦通知我修正,谢谢!





评论
登录后即可评论
分享你的想法,与作者互动
暂无评论