baomidou / dynamic-datasource

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

fix:DruidDatasource无法关闭closed (baomidou#637) #638

Closed shen3 closed 4 months ago

shen3 commented 4 months ago

What kind of change does this PR introduce? (check at least one)

The description of the PR: 1、closeDataSource方法进来默认直接把数据源dataSource 赋值给 realDatasource。下面if...else条件如果为真,realDatasource会被重新赋值,不影响原来的逻辑。 2、如果dataSource 是Druid等其他的数据源,也能够被closed。

huayanYu commented 4 months ago

不喜欢提前赋值的这种方式

shen3 commented 4 months ago

DataSource realDataSource = null; if (dataSource instanceof ItemDataSource) { realDataSource = ((ItemDataSource) dataSource).getRealDataSource(); } else { if (seata) { if (dataSource instanceof DataSourceProxy) { DataSourceProxy dataSourceProxy = (DataSourceProxy) dataSource; realDataSource = dataSourceProxy.getTargetDataSource(); } } if (p6spy) { if (dataSource instanceof P6DataSource) { Field realDataSourceField = P6DataSource.class.getDeclaredField("realDataSource"); realDataSourceField.setAccessible(true); realDataSource = (DataSource) realDataSourceField.get(dataSource); } } }

这种?

if (null == realDataSource) { realDataSource = dataSource; }

if (null != realDataSource) { DataSourceDestroyer destroyer = new DefaultDataSourceDestroyer(); if (graceDestroy) { destroyer.asyncDestroy(ds, realDataSource); } else { destroyer.destroy(ds, realDataSource); } }

huayanYu commented 4 months ago

en

shen3 commented 4 months ago

已重新提交