mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
fix db bug
This commit is contained in:
@@ -8,6 +8,7 @@
|
|||||||
### 新特性
|
### 新特性
|
||||||
|
|
||||||
### Bug修复
|
### Bug修复
|
||||||
|
* 【db】 解决ThreadLocalConnection多数据源被移除问题(pr#66@Gitee)
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@@ -35,7 +35,7 @@ public enum ThreadLocalConnection {
|
|||||||
}
|
}
|
||||||
return groupedConnection.get(ds);
|
return groupedConnection.get(ds);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 关闭数据库,并从线程池中移除
|
* 关闭数据库,并从线程池中移除
|
||||||
*
|
*
|
||||||
@@ -46,7 +46,8 @@ public enum ThreadLocalConnection {
|
|||||||
GroupedConnection groupedConnection = threadLocal.get();
|
GroupedConnection groupedConnection = threadLocal.get();
|
||||||
if (null != groupedConnection) {
|
if (null != groupedConnection) {
|
||||||
groupedConnection.close(ds);
|
groupedConnection.close(ds);
|
||||||
if(groupedConnection.removeAble()){
|
if (groupedConnection.isEmpty()) {
|
||||||
|
// 当所有分组都没有持有的连接时,移除这个分组连接
|
||||||
threadLocal.remove();
|
threadLocal.remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -54,6 +55,8 @@ public enum ThreadLocalConnection {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 分组连接,根据不同的分组获取对应的连接,用于多数据源情况
|
* 分组连接,根据不同的分组获取对应的连接,用于多数据源情况
|
||||||
|
*
|
||||||
|
* @author Looly
|
||||||
*/
|
*/
|
||||||
public static class GroupedConnection {
|
public static class GroupedConnection {
|
||||||
|
|
||||||
@@ -75,7 +78,7 @@ public enum ThreadLocalConnection {
|
|||||||
}
|
}
|
||||||
return conn;
|
return conn;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 关闭并移除Connection<br>
|
* 关闭并移除Connection<br>
|
||||||
* 如果处于事务中,则不进行任何操作
|
* 如果处于事务中,则不进行任何操作
|
||||||
@@ -85,27 +88,29 @@ public enum ThreadLocalConnection {
|
|||||||
*/
|
*/
|
||||||
public GroupedConnection close(DataSource ds) {
|
public GroupedConnection close(DataSource ds) {
|
||||||
final Connection conn = connMap.get(ds);
|
final Connection conn = connMap.get(ds);
|
||||||
if(null != conn) {
|
if (null != conn) {
|
||||||
try {
|
try {
|
||||||
if(false == conn.getAutoCommit()) {
|
if (false == conn.getAutoCommit()) {
|
||||||
//非自动提交事务的连接,不做关闭(可能处于事务中)
|
// 非自动提交事务的连接,不做关闭(可能处于事务中)
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
//ignore
|
// ignore
|
||||||
}
|
}
|
||||||
connMap.remove(ds);
|
connMap.remove(ds);
|
||||||
DbUtil.close(conn);
|
DbUtil.close(conn);
|
||||||
}
|
}
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 多数据源情况情况下判断是否能从上下文中删除
|
* 持有的连接是否为空
|
||||||
* @return
|
*
|
||||||
|
* @return 持有的连接是否为空
|
||||||
|
* @since 4.6.4
|
||||||
*/
|
*/
|
||||||
public boolean removeAble(){
|
public boolean isEmpty() {
|
||||||
return connMap.size()==0;
|
return connMap.isEmpty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user