上周我们的应用由于前端JS控制不到位,用户多次点击下载按钮,而又由于下载SQL执行很慢,导致DB的连接池的连接用完,数据库挂掉了。
我想问下大家在工作中有没有做过你们整个系统级别的全局性的数据库连接的并发控制的?通俗来说就是怎么控制这个DB的连接的,如何能做到连接用完了就进行友好提示而不致于继续去取连接导致异常。
我先自己抛一个方案,采用数据库进行记录耗性能SQL的每次操作,在业务方法开始进行登记连接,在业务方法结束后进行登记已用完连接。这样如果用户在上次SQL查询还没完毕前再请求,则进行对应提示。
但是该方案也只能是针对局部的耗性能SQL进行处理,缺点在于使用成本还是有点高的。
另外我的一个想法是采用Spring的AOP机制,在Spring的事务底层去下手。
大家有没有更好的建议或者基于我的想法深入讨论一下都可以。整个系统级别的并发控制呢