Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
7a617c44
Shardingsphere
项目概览
apache
/
Shardingsphere
通知
56
Star
3
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Shardingsphere
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
7a617c44
编写于
11月 28, 2016
作者:
G
Gao Hongtao
提交者:
gaohongtao
11月 28, 2016
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fixed #194 Part of the jdbc objects can not be released
上级
2c3fae04
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
115 addition
and
14 deletion
+115
-14
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/jdbc/adapter/AbstractConnectionAdapter.java
.../rdb/sharding/jdbc/adapter/AbstractConnectionAdapter.java
+14
-6
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/jdbc/adapter/AbstractResultSetAdapter.java
...e/rdb/sharding/jdbc/adapter/AbstractResultSetAdapter.java
+8
-3
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/jdbc/adapter/AbstractStatementAdapter.java
...e/rdb/sharding/jdbc/adapter/AbstractStatementAdapter.java
+9
-3
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/util/SQLUtil.java
.../java/com/dangdang/ddframe/rdb/sharding/util/SQLUtil.java
+31
-0
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/util/ThrowableSQLExceptionMethod.java
...dframe/rdb/sharding/util/ThrowableSQLExceptionMethod.java
+36
-0
sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/jdbc/ShardingConnectionTest.java
...ang/ddframe/rdb/sharding/jdbc/ShardingConnectionTest.java
+13
-2
sharding-jdbc-doc/content/post/release_notes.md
sharding-jdbc-doc/content/post/release_notes.md
+4
-0
未找到文件。
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/jdbc/adapter/AbstractConnectionAdapter.java
浏览文件 @
7a617c44
...
...
@@ -19,6 +19,8 @@ package com.dangdang.ddframe.rdb.sharding.jdbc.adapter;
import
com.dangdang.ddframe.rdb.sharding.jdbc.unsupported.AbstractUnsupportedOperationConnection
;
import
com.dangdang.ddframe.rdb.sharding.metrics.MetricsContext
;
import
com.dangdang.ddframe.rdb.sharding.util.SQLUtil
;
import
com.dangdang.ddframe.rdb.sharding.util.ThrowableSQLExceptionMethod
;
import
java.sql.Connection
;
import
java.sql.ResultSet
;
...
...
@@ -69,16 +71,22 @@ public abstract class AbstractConnectionAdapter extends AbstractUnsupportedOpera
@Override
public
final
void
rollback
()
throws
SQLException
{
for
(
Connection
each
:
getConnections
())
{
each
.
rollback
();
}
SQLUtil
.
safeInvoke
(
getConnections
(),
new
ThrowableSQLExceptionMethod
<
Connection
>()
{
@Override
public
void
apply
(
final
Connection
object
)
throws
SQLException
{
object
.
rollback
();
}
});
}
@Override
public
void
close
()
throws
SQLException
{
for
(
Connection
each
:
getConnections
())
{
each
.
close
();
}
SQLUtil
.
safeInvoke
(
getConnections
(),
new
ThrowableSQLExceptionMethod
<
Connection
>()
{
@Override
public
void
apply
(
final
Connection
object
)
throws
SQLException
{
object
.
close
();
}
});
closed
=
true
;
MetricsContext
.
clear
();
}
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/jdbc/adapter/AbstractResultSetAdapter.java
浏览文件 @
7a617c44
...
...
@@ -18,6 +18,8 @@
package
com.dangdang.ddframe.rdb.sharding.jdbc.adapter
;
import
com.dangdang.ddframe.rdb.sharding.jdbc.unsupported.AbstractUnsupportedOperationResultSet
;
import
com.dangdang.ddframe.rdb.sharding.util.SQLUtil
;
import
com.dangdang.ddframe.rdb.sharding.util.ThrowableSQLExceptionMethod
;
import
com.google.common.base.Preconditions
;
import
lombok.AccessLevel
;
import
lombok.Getter
;
...
...
@@ -63,9 +65,12 @@ public abstract class AbstractResultSetAdapter extends AbstractUnsupportedOperat
@Override
public
final
void
close
()
throws
SQLException
{
for
(
ResultSet
each
:
resultSets
)
{
each
.
close
();
}
SQLUtil
.
safeInvoke
(
resultSets
,
new
ThrowableSQLExceptionMethod
<
ResultSet
>()
{
@Override
public
void
apply
(
final
ResultSet
object
)
throws
SQLException
{
object
.
close
();
}
});
closed
=
true
;
}
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/jdbc/adapter/AbstractStatementAdapter.java
浏览文件 @
7a617c44
...
...
@@ -18,6 +18,8 @@
package
com.dangdang.ddframe.rdb.sharding.jdbc.adapter
;
import
com.dangdang.ddframe.rdb.sharding.jdbc.unsupported.AbstractUnsupportedOperationStatement
;
import
com.dangdang.ddframe.rdb.sharding.util.SQLUtil
;
import
com.dangdang.ddframe.rdb.sharding.util.ThrowableSQLExceptionMethod
;
import
lombok.RequiredArgsConstructor
;
import
java.sql.ResultSet
;
...
...
@@ -45,10 +47,14 @@ public abstract class AbstractStatementAdapter extends AbstractUnsupportedOperat
protected
abstract
void
clearRouteStatements
();
@Override
@SuppressWarnings
(
"unchecked"
)
public
final
void
close
()
throws
SQLException
{
for
(
Statement
each
:
getRoutedStatements
())
{
each
.
close
();
}
SQLUtil
.
safeInvoke
(
getRoutedStatements
(),
new
ThrowableSQLExceptionMethod
()
{
@Override
public
void
apply
(
final
Object
object
)
throws
SQLException
{
((
Statement
)
object
).
close
();
}
});
closed
=
true
;
clearRouteStatements
();
}
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/util/SQLUtil.java
浏览文件 @
7a617c44
...
...
@@ -21,6 +21,9 @@ import com.google.common.base.CharMatcher;
import
lombok.AccessLevel
;
import
lombok.AllArgsConstructor
;
import
java.sql.SQLException
;
import
java.util.Collection
;
/**
* SQL工具类.
*
...
...
@@ -38,4 +41,32 @@ public class SQLUtil {
public
static
String
getExactlyValue
(
final
String
value
)
{
return
null
==
value
?
null
:
CharMatcher
.
anyOf
(
"[]`'\""
).
removeFrom
(
value
);
}
/**
* 安全的调用一组可能抛出{@linkplain SQLException}的对象中的方法.
* 通过该方法保证后,保证每个对象中的方法均被调用一次
*
* @param throwableSQLExceptionObjects 调用方法可能抛出异常的对象集合
* @param method 方法定义
* @param <T> 对象类型
* @throws SQLException 数据库访问异常会抛出
*/
public
static
<
T
>
void
safeInvoke
(
final
Collection
<
T
>
throwableSQLExceptionObjects
,
final
ThrowableSQLExceptionMethod
<
T
>
method
)
throws
SQLException
{
SQLException
current
=
null
;
for
(
T
each
:
throwableSQLExceptionObjects
)
{
try
{
method
.
apply
(
each
);
}
catch
(
final
SQLException
exp
)
{
if
(
null
==
current
)
{
current
=
exp
;
}
else
{
current
.
setNextException
(
exp
);
current
=
exp
;
}
}
}
if
(
null
!=
current
)
{
throw
current
;
}
}
}
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/util/ThrowableSQLExceptionMethod.java
0 → 100644
浏览文件 @
7a617c44
/*
* Copyright 1999-2015 dangdang.com.
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* </p>
*/
package
com.dangdang.ddframe.rdb.sharding.util
;
import
java.sql.SQLException
;
/**
* 可抛出{@linkplain java.sql.SQLException}的方法.
*
* @author gaohongtao.
*/
public
interface
ThrowableSQLExceptionMethod
<
T
>
{
/**
* 调用对象中的方法可能抛出{@linkplain java.sql.SQLException}.
*
* @param object 调用方法的对象
* @throws SQLException 访问数据库错误可以抛出该异常
*/
void
apply
(
T
object
)
throws
SQLException
;
}
sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/jdbc/ShardingConnectionTest.java
浏览文件 @
7a617c44
...
...
@@ -34,10 +34,10 @@ import java.util.Collections;
import
java.util.HashMap
;
import
java.util.Map
;
import
static
org
.
junit
.
Assert
.
assertNotNull
;
import
static
org
.
junit
.
Assert
.
assertNotSame
;
import
static
org
.
junit
.
Assert
.
assertSame
;
public
class
ShardingConnectionTest
{
private
static
final
DataSource
MASTER_DATA_SOURCE
=
new
TestDataSource
(
"test_ds_master"
);
...
...
@@ -106,9 +106,20 @@ public class ShardingConnectionTest {
}
@Test
public
void
releaseBrokenConnection
Test
()
throws
Exception
{
public
void
releaseBrokenConnection
()
throws
Exception
{
Connection
conn
=
connection
.
getConnection
(
DS_NAME
,
SQLStatementType
.
UPDATE
);
connection
.
releaseBrokenConnection
(
conn
);
assertNotSame
(
conn
,
connection
.
getConnection
(
DS_NAME
,
SQLStatementType
.
UPDATE
));
}
@Test
public
void
closeExceptionConnection
()
throws
SQLException
{
connection
.
getConnection
(
DS_NAME
,
SQLStatementType
.
SELECT
);
connection
.
getConnection
(
DS_NAME
,
SQLStatementType
.
UPDATE
);
try
{
connection
.
close
();
}
catch
(
final
SQLException
exp
)
{
assertNotNull
(
exp
.
getNextException
());
}
}
}
sharding-jdbc-doc/content/post/release_notes.md
浏览文件 @
7a617c44
...
...
@@ -8,6 +8,10 @@ weight = 1
## 1.4.1-SNAPSHOT
### 缺陷修正
1.
[
ISSUE #194
](
https://github.com/dangdangdotcom/sharding-jdbc/issues/194
)
jdbc接口中资源释放错误
## 1.4.0
### 功能提升
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录