忆梦|利用Sharding-JDBC解决数据库读写分离查询延时问题( 二 )

<>();filterList.add(wallFilter());druidDataSource.setProxyFilters(filterList);} catch (SQLException e) {e.printStackTrace();}}}强制路由到主库查询关键代码:
public ArticleEntity getWithMasterDB(Long id, String wid) {HintManager hintManager = HintManager.getInstance() ;hintManager.setMasterRouteOnly();ArticleEntity article = baseMapper.queryObject(id, wid);}通过强制路由到主库查询有个风险 , 对于更新并实时查询业务场景比较多 , 如果都切到主库查询 , 势必会对主库服务器性能造成影响 , 可能还会影响到主从数据同步 , 所以要根据实际业务场景评估采用这种方式带来的系统性能问题 。
【忆梦|利用Sharding-JDBC解决数据库读写分离查询延时问题】另外 , 如果业务层面可以做妥协的话 , 尽量减少这种更新并实时查询方式 , 一种思路是实时更新库 , 利用 Java Future 特性异步查询(例如更新后 , 睡眠1-2秒再查询) , 伪代码如下:
Callable c1 = new Callable(){@Overridepublic String call() throws Exception {ArticleEntity articleEntity = nulltry {Thread.sleep(2000);articleEntity = articleService.get(id)} catch (InterruptedException e) {e.printStackTrace();}return articleEntity;}};FutureTask f = new FutureTask(c1);new Thread(f).start();ArticleEntity article = f.get()后台私信回复 1024 免费领取微服务、SpringCloud&SpringBoot , 微信小程序、Java面试等视频资料 。