背景:项目中有使用阻塞队列,当停机/发版时,要保障队列数据全部消费完,写数据库成功,最后才关闭销毁DruidDataSource实例。
问题:会出现数据源过早关闭的情况,异常如下
{dataSource-1} closed
Caused by: org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is com.alibaba.druid.pool.DataSourceClosedException: dataSource already closed at xx2019
分析:调用了 DruidDataSource.close()
方法。
没找到closeHook()方法,或许这个场景需要自行去做关闭动作,需要类似lifecycle的功能,这样可以在”关闭前/后“做定制。
@wenshao@lihengming 大神,如何破
7条答案
按热度按时间vuv7lop31#
同问,同需要这个功能,我的业务场景是自行维护全局的DataSource,其中配置是可以在线动态更改的,一旦检测到配置更改,将会干掉原来的DataSource,重新搞个新的,但这就得保证旧的DataSource能正常释放资源,并且不是强行关闭已有连接后回收资源,而是等待已有连接自行关闭后再回收资源
igsr9ssn2#
@wenshao 这个特性我们也有类似需求,有没有计划做这个事情啊
hs1rzwqc3#
同问
cwdobuhd4#
i have the same problem
5t7ly7z55#
同问
elcex8rz6#
I have the same issue,our services need to chang db user & pwd at runtime, and could not interrupt business and with no db errors.
quhf5bfb7#
这个特性我们也需要。。。麻烦不要在工具内部自己关,提供接口给用户自己关闭吧。。