一般我们写Java程序,都是同步去执行的。但是当遇到一个方法中有多个特别耗时的SQL查询,这时候我们就得等一个个sql慢慢执行完,比如一个SQL查询2秒,3个就是6秒,这个就不是我们想要的呢。那怎么解决呢?第一优化你的SQL;第二优化你的程序。
本篇文章主要介绍的是优化你的程序,我们可以将同步的SQL查询改为异步的SQL查询。具体如何操作,我就直接贴代码了:
CompletableFuture<List> firstFuture = (() -> {
try {
Map<String, Object> paramsMap = new HashMap<>();
//TODO 设置参数 因是异步执行 要保持参数一直
("XX", "XX");
...
...//数据库查询
return (paramsMap);
} catch (Exception e) {
();
}
return null;
});CompletableFuture<List> secondFuture = (() -> {
try {
Map<String, Object> paramsMap = new HashMap<>();
//TODO 设置参数 因是异步执行 要保持参数一直
("XX", "XX");
...
...//数据库查询
return (paramsMap);
} catch (Exception e) {
();
}
return null;
});
//有几个查询写几个
...
...
//接收异步查询的结果
(firstFuture, secondFuture, ...).join();
List<Object> firstResult = ();
List<Object> secondResult = ();
...
...
上面代码就是异步查询数据库的核心代码,因为是异步执行,要注意参数的一致性(原子性)。
改为异步你会发现多个长耗时的SQL异步去执行,大大减少了程序等待的时间,提升了响应。
上面只是个人理解,如有不正或者更好的方法,请麻烦通知我修正,谢谢!