baomidou / dynamic-datasource

dynamic datasource for springboot 多数据源 动态数据源 主从分离 读写分离 分布式事务
https://www.kancloud.cn/tracy5546/dynamic-datasource/2264611
Apache License 2.0
4.74k stars 1.19k forks source link

多数据源动态切换完毕后动态数据源未正确关闭 #48

Closed codingLemonzz closed 5 years ago

codingLemonzz commented 5 years ago

Enviroment

springboot+durid+mybatis-plus+postgresql JDK Version(required): 1.8 SpringBoot Version(required): 2.1.1.RELEASE Starter Version(required): v2.5.4

Describe

在使用多数据源动态切换到某一指定数据源时,获得数据返还给前台后,此时该数据源依旧未正确关闭,且依旧会占用一个数据库连接,并保持一段不短的时间,直到druid清除未活跃的连接之后才会被清除。但若访问量增大时,过多的占用数据库连接会导致: org.postgresql.util.PSQLException:致命:抱歉,已经有太多客户了 仅仅通过增大postgresql的连接数并不能解决根本问题。 且在dynamic-datasource更新到2.5.4版本之后,调用 dynamicRoutingDataSource.removeDataSource(dbname); DynamicDataSourceContextHolder.clear(); 两个方法似乎也无法有效关闭数据源,是有其他的方法吗?或者说该如何解决这个问题呢?

Expected Result:

Actual Result:

Steps to reproduce

huayanYu commented 5 years ago

我这个只管切换数据源, 而且连接为什么要关闭? 不然用连接池干什么?

至于removeDataSource 确实可以考虑真实关闭,因为不需要这个连接池了.

你的访问量增加连接池不够或者占用时间久你应该排查代码调整连接池参数.