怎样避免数据库不响应导致数据库线程池和业务线程池全部挂起

与数据库交互,最优的方式还是异步io啦如果这个实现不了,那么只能搞个线程池去负责了,注意,这种io密集型任务,多开几个线程最好做成连接池,内部实现和暴露接口分离,接口返回的数据类型completablefuture最好了,这样异步处理,io时也不需要你的业务线程等待
■网友
在一般业务并发处理中,能抛出主业务就抛出主业务,让主业务能最大并发处理。
当然如果在主业务中数据库响应很慢,而且持续时间很长,那么无论线程池中多少个线程(线程无线多也不是什么好事),最终还是被消耗殆尽。


【怎样避免数据库不响应导致数据库线程池和业务线程池全部挂起】 我并不知道楼主的业务场景,我就拿普通交易系统来讨论。
如果你业务处理全部在一个数据库中,全部挂起,这种问题,没法解决,喊DBA优化你的数据库或者升级配置吧。
如果是暂时的,可以对业务每笔采用超时时间,超时则业务回滚,冲正。
如果你的部分业务不在一个数据库中, 可以做一个流量限制,让余下的线程可以正常处理其他业务。

■网友
数据库读写线程做超时,哪怕异步了,堵住了没有超时一样会死。再用个守护线程去检测这些排队的情况,一旦超出阈值就报警吧。

■网友
可以设置等待响应时间,超过即丢掉请求。数据库响应不及时也是很常见的,不能一直死等


    推荐阅读