Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
e2f40943
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 搜索 >>
提交
e2f40943
编写于
6月 08, 2017
作者:
T
terrymanu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
simplify AbstractExecutorWrapper 4rd version
上级
8aef60d4
变更
4
展开全部
隐藏空白更改
内联
并排
Showing
4 changed file
with
77 addition
and
74 deletion
+77
-74
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/executor/StatementExecutor.java
...dang/ddframe/rdb/sharding/executor/StatementExecutor.java
+36
-33
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/jdbc/core/statement/ShardingStatement.java
...e/rdb/sharding/jdbc/core/statement/ShardingStatement.java
+5
-4
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/jdbc/core/statement/prepared/ShardingPreparedStatement.java
...bc/core/statement/prepared/ShardingPreparedStatement.java
+1
-0
sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/executor/StatementExecutorTest.java
.../ddframe/rdb/sharding/executor/StatementExecutorTest.java
+35
-37
未找到文件。
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/executor/StatementExecutor.java
浏览文件 @
e2f40943
...
...
@@ -22,17 +22,17 @@ import com.dangdang.ddframe.rdb.sharding.constant.SQLType;
import
com.dangdang.ddframe.rdb.sharding.executor.event.DMLExecutionEvent
;
import
com.dangdang.ddframe.rdb.sharding.executor.event.DQLExecutionEvent
;
import
com.dangdang.ddframe.rdb.sharding.executor.event.ExecutionEvent
;
import
com.dangdang.ddframe.rdb.sharding.executor.wrapper.StatementExecutorWrapper
;
import
com.dangdang.ddframe.rdb.sharding.metrics.MetricsContext
;
import
com.dangdang.ddframe.rdb.sharding.routing.SQLExecutionUnit
;
import
lombok.RequiredArgsConstructor
;
import
java.sql.ResultSet
;
import
java.sql.SQLException
;
import
java.sql.Statement
;
import
java.util.Collection
;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map.Entry
;
/**
* 多线程执行静态语句对象请求的执行器.
...
...
@@ -48,7 +48,7 @@ public final class StatementExecutor {
private
final
SQLType
sqlType
;
private
final
Collection
<
StatementExecutorWrapper
>
statementExecutorWrapper
s
;
private
final
Map
<
SQLExecutionUnit
,
Statement
>
statement
s
;
private
final
EventPostman
eventPostman
=
new
EventPostman
();
...
...
@@ -63,15 +63,16 @@ public final class StatementExecutor {
final
Map
<
String
,
Object
>
dataMap
=
ExecutorDataMap
.
getDataMap
();
List
<
ResultSet
>
result
;
try
{
if
(
1
==
statementExecutorWrappers
.
size
())
{
return
Collections
.
singletonList
(
executeQueryInternal
(
statementExecutorWrappers
.
iterator
().
next
(),
isExceptionThrown
,
dataMap
));
if
(
1
==
statements
.
size
())
{
Entry
<
SQLExecutionUnit
,
Statement
>
entry
=
statements
.
entrySet
().
iterator
().
next
();
return
Collections
.
singletonList
(
executeQueryInternal
(
entry
.
getKey
(),
entry
.
getValue
(),
isExceptionThrown
,
dataMap
));
}
result
=
executorEngine
.
execute
(
statement
ExecutorWrappers
,
new
ExecuteUnit
<
StatementExecutorWrapper
,
ResultSet
>()
{
result
=
executorEngine
.
execute
(
statement
s
.
entrySet
(),
new
ExecuteUnit
<
Entry
<
SQLExecutionUnit
,
Statement
>
,
ResultSet
>()
{
@Override
public
ResultSet
execute
(
final
StatementExecutorWrapper
input
)
throws
Exception
{
synchronized
(
input
.
get
Statement
().
getConnection
())
{
return
executeQueryInternal
(
input
,
isExceptionThrown
,
dataMap
);
public
ResultSet
execute
(
final
Entry
<
SQLExecutionUnit
,
Statement
>
input
)
throws
Exception
{
synchronized
(
input
.
get
Value
().
getConnection
())
{
return
executeQueryInternal
(
input
.
getKey
(),
input
.
getValue
()
,
isExceptionThrown
,
dataMap
);
}
}
});
...
...
@@ -81,14 +82,14 @@ public final class StatementExecutor {
return
result
;
}
private
ResultSet
executeQueryInternal
(
final
S
tatementExecutorWrapper
statementExecutorWrapper
,
final
boolean
isExceptionThrown
,
final
Map
<
String
,
Object
>
dataMap
)
{
private
ResultSet
executeQueryInternal
(
final
S
QLExecutionUnit
sqlExecutionUnit
,
final
Statement
statement
,
final
boolean
isExceptionThrown
,
final
Map
<
String
,
Object
>
dataMap
)
{
ResultSet
result
;
ExecutorExceptionHandler
.
setExceptionThrown
(
isExceptionThrown
);
ExecutorDataMap
.
setDataMap
(
dataMap
);
ExecutionEvent
event
=
getExecutionEvent
(
s
tatementExecutorWrapper
);
ExecutionEvent
event
=
getExecutionEvent
(
s
qlExecutionUnit
);
eventPostman
.
post
(
event
);
try
{
result
=
statement
ExecutorWrapper
.
getStatement
().
executeQuery
(
statementExecutorWrapper
.
getSqlExecutionUnit
()
.
getSql
());
result
=
statement
.
executeQuery
(
sqlExecutionUnit
.
getSql
());
}
catch
(
final
SQLException
ex
)
{
eventPostman
.
postForExecuteFailure
(
event
,
ex
);
ExecutorExceptionHandler
.
handleException
(
ex
);
...
...
@@ -148,15 +149,16 @@ public final class StatementExecutor {
final
boolean
isExceptionThrown
=
ExecutorExceptionHandler
.
isExceptionThrown
();
final
Map
<
String
,
Object
>
dataMap
=
ExecutorDataMap
.
getDataMap
();
try
{
if
(
1
==
statementExecutorWrappers
.
size
())
{
return
executeUpdateInternal
(
updater
,
statementExecutorWrappers
.
iterator
().
next
(),
isExceptionThrown
,
dataMap
);
if
(
1
==
statements
.
size
())
{
Entry
<
SQLExecutionUnit
,
Statement
>
entry
=
statements
.
entrySet
().
iterator
().
next
();
return
executeUpdateInternal
(
updater
,
entry
.
getKey
(),
entry
.
getValue
(),
isExceptionThrown
,
dataMap
);
}
return
executorEngine
.
execute
(
statement
ExecutorWrappers
,
new
ExecuteUnit
<
StatementExecutorWrapper
,
Integer
>()
{
return
executorEngine
.
execute
(
statement
s
.
entrySet
(),
new
ExecuteUnit
<
Entry
<
SQLExecutionUnit
,
Statement
>
,
Integer
>()
{
@Override
public
Integer
execute
(
final
StatementExecutorWrapper
input
)
throws
Exception
{
synchronized
(
input
.
get
Statement
().
getConnection
())
{
return
executeUpdateInternal
(
updater
,
input
,
isExceptionThrown
,
dataMap
);
public
Integer
execute
(
final
Entry
<
SQLExecutionUnit
,
Statement
>
input
)
throws
Exception
{
synchronized
(
input
.
get
Value
().
getConnection
())
{
return
executeUpdateInternal
(
updater
,
input
.
getKey
(),
input
.
getValue
()
,
isExceptionThrown
,
dataMap
);
}
}
},
new
MergeUnit
<
Integer
,
Integer
>()
{
...
...
@@ -178,14 +180,14 @@ public final class StatementExecutor {
}
}
private
int
executeUpdateInternal
(
final
Updater
updater
,
final
S
tatementExecutorWrapper
statementExecutorWrapper
,
final
boolean
isExceptionThrown
,
final
Map
<
String
,
Object
>
dataMap
)
{
private
int
executeUpdateInternal
(
final
Updater
updater
,
final
S
QLExecutionUnit
sqlExecutionUnit
,
final
Statement
statement
,
final
boolean
isExceptionThrown
,
final
Map
<
String
,
Object
>
dataMap
)
{
int
result
;
ExecutorExceptionHandler
.
setExceptionThrown
(
isExceptionThrown
);
ExecutorDataMap
.
setDataMap
(
dataMap
);
ExecutionEvent
event
=
getExecutionEvent
(
s
tatementExecutorWrapper
);
ExecutionEvent
event
=
getExecutionEvent
(
s
qlExecutionUnit
);
eventPostman
.
post
(
event
);
try
{
result
=
updater
.
executeUpdate
(
statement
ExecutorWrapper
.
getStatement
(),
statementExecutorWrapper
.
getSqlExecutionUnit
()
.
getSql
());
result
=
updater
.
executeUpdate
(
statement
,
sqlExecutionUnit
.
getSql
());
}
catch
(
final
SQLException
ex
)
{
eventPostman
.
postForExecuteFailure
(
event
,
ex
);
ExecutorExceptionHandler
.
handleException
(
ex
);
...
...
@@ -245,15 +247,16 @@ public final class StatementExecutor {
final
boolean
isExceptionThrown
=
ExecutorExceptionHandler
.
isExceptionThrown
();
final
Map
<
String
,
Object
>
dataMap
=
ExecutorDataMap
.
getDataMap
();
try
{
if
(
1
==
statementExecutorWrappers
.
size
())
{
return
executeInternal
(
executor
,
statementExecutorWrappers
.
iterator
().
next
(),
isExceptionThrown
,
dataMap
);
if
(
1
==
statements
.
size
())
{
Entry
<
SQLExecutionUnit
,
Statement
>
entry
=
statements
.
entrySet
().
iterator
().
next
();
return
executeInternal
(
executor
,
entry
.
getKey
(),
entry
.
getValue
(),
isExceptionThrown
,
dataMap
);
}
List
<
Boolean
>
result
=
executorEngine
.
execute
(
statement
ExecutorWrappers
,
new
ExecuteUnit
<
StatementExecutorWrapper
,
Boolean
>()
{
List
<
Boolean
>
result
=
executorEngine
.
execute
(
statement
s
.
entrySet
(),
new
ExecuteUnit
<
Entry
<
SQLExecutionUnit
,
Statement
>
,
Boolean
>()
{
@Override
public
Boolean
execute
(
final
StatementExecutorWrapper
input
)
throws
Exception
{
synchronized
(
input
.
get
Statement
().
getConnection
())
{
return
executeInternal
(
executor
,
input
,
isExceptionThrown
,
dataMap
);
public
Boolean
execute
(
final
Entry
<
SQLExecutionUnit
,
Statement
>
input
)
throws
Exception
{
synchronized
(
input
.
get
Value
().
getConnection
())
{
return
executeInternal
(
executor
,
input
.
getKey
(),
input
.
getValue
()
,
isExceptionThrown
,
dataMap
);
}
}
});
...
...
@@ -263,14 +266,14 @@ public final class StatementExecutor {
}
}
private
boolean
executeInternal
(
final
Executor
executor
,
final
S
tatementExecutorWrapper
statementExecutorWrapper
,
final
boolean
isExceptionThrown
,
final
Map
<
String
,
Object
>
dataMap
)
{
private
boolean
executeInternal
(
final
Executor
executor
,
final
S
QLExecutionUnit
sqlExecutionUnit
,
final
Statement
statement
,
final
boolean
isExceptionThrown
,
final
Map
<
String
,
Object
>
dataMap
)
{
boolean
result
;
ExecutorExceptionHandler
.
setExceptionThrown
(
isExceptionThrown
);
ExecutorDataMap
.
setDataMap
(
dataMap
);
ExecutionEvent
event
=
getExecutionEvent
(
s
tatementExecutorWrapper
);
ExecutionEvent
event
=
getExecutionEvent
(
s
qlExecutionUnit
);
eventPostman
.
post
(
event
);
try
{
result
=
executor
.
execute
(
statement
ExecutorWrapper
.
getStatement
(),
statementExecutorWrapper
.
getSqlExecutionUnit
()
.
getSql
());
result
=
executor
.
execute
(
statement
,
sqlExecutionUnit
.
getSql
());
}
catch
(
final
SQLException
ex
)
{
eventPostman
.
postForExecuteFailure
(
event
,
ex
);
ExecutorExceptionHandler
.
handleException
(
ex
);
...
...
@@ -280,12 +283,12 @@ public final class StatementExecutor {
return
result
;
}
private
ExecutionEvent
getExecutionEvent
(
final
S
tatementExecutorWrapper
statementExecutorWrapper
)
{
private
ExecutionEvent
getExecutionEvent
(
final
S
QLExecutionUnit
sqlExecutionUnit
)
{
ExecutionEvent
event
;
if
(
SQLType
.
SELECT
==
sqlType
)
{
event
=
new
DQLExecutionEvent
(
s
tatementExecutorWrapper
.
getSqlExecutionUnit
().
getDataSource
(),
statementExecutorWrapper
.
getSqlExecutionUnit
()
.
getSql
());
event
=
new
DQLExecutionEvent
(
s
qlExecutionUnit
.
getDataSource
(),
sqlExecutionUnit
.
getSql
());
}
else
{
event
=
new
DMLExecutionEvent
(
s
tatementExecutorWrapper
.
getSqlExecutionUnit
().
getDataSource
(),
statementExecutorWrapper
.
getSqlExecutionUnit
()
.
getSql
());
event
=
new
DMLExecutionEvent
(
s
qlExecutionUnit
.
getDataSource
(),
sqlExecutionUnit
.
getSql
());
}
return
event
;
}
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/jdbc/core/statement/ShardingStatement.java
浏览文件 @
e2f40943
...
...
@@ -18,7 +18,6 @@
package
com.dangdang.ddframe.rdb.sharding.jdbc.core.statement
;
import
com.dangdang.ddframe.rdb.sharding.executor.StatementExecutor
;
import
com.dangdang.ddframe.rdb.sharding.executor.wrapper.StatementExecutorWrapper
;
import
com.dangdang.ddframe.rdb.sharding.jdbc.adapter.AbstractStatementAdapter
;
import
com.dangdang.ddframe.rdb.sharding.jdbc.core.connection.ShardingConnection
;
import
com.dangdang.ddframe.rdb.sharding.jdbc.core.resultset.GeneratedKeysResultSet
;
...
...
@@ -39,8 +38,10 @@ import java.sql.SQLException;
import
java.sql.Statement
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.HashMap
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.Map
;
/**
* 支持分片的静态语句对象.
...
...
@@ -198,15 +199,15 @@ public class ShardingStatement extends AbstractStatementAdapter {
private
StatementExecutor
generateExecutor
(
final
String
sql
)
throws
SQLException
{
clearPrevious
();
routeResult
=
new
StatementRoutingEngine
(
shardingConnection
.
getShardingContext
()).
route
(
sql
);
Collection
<
StatementExecutorWrapper
>
statementExecutorWrappers
=
new
LinkedList
<>(
);
Map
<
SQLExecutionUnit
,
Statement
>
statements
=
new
HashMap
<>(
routeResult
.
getExecutionUnits
().
size
(),
1
);
for
(
SQLExecutionUnit
each
:
routeResult
.
getExecutionUnits
())
{
Statement
statement
=
shardingConnection
.
getConnection
(
each
.
getDataSource
(),
routeResult
.
getSqlStatement
().
getType
()).
createStatement
(
resultSetType
,
resultSetConcurrency
,
resultSetHoldability
);
replayMethodsInvocation
(
statement
);
statement
ExecutorWrappers
.
add
(
new
StatementExecutorWrapper
(
statement
,
each
)
);
statement
s
.
put
(
each
,
statement
);
routedStatements
.
add
(
statement
);
}
return
new
StatementExecutor
(
shardingConnection
.
getShardingContext
().
getExecutorEngine
(),
routeResult
.
getSqlStatement
().
getType
(),
statement
ExecutorWrapper
s
);
return
new
StatementExecutor
(
shardingConnection
.
getShardingContext
().
getExecutorEngine
(),
routeResult
.
getSqlStatement
().
getType
(),
statements
);
}
private
void
clearPrevious
()
throws
SQLException
{
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/jdbc/core/statement/prepared/ShardingPreparedStatement.java
浏览文件 @
e2f40943
...
...
@@ -195,6 +195,7 @@ public final class ShardingPreparedStatement extends AbstractPreparedStatementAd
private
PreparedStatementExecutorWrapper
wrap
(
final
PreparedStatement
preparedStatement
,
final
SQLExecutionUnit
sqlExecutionUnit
)
{
Optional
<
PreparedStatementExecutorWrapper
>
wrapperOptional
=
Iterators
.
tryFind
(
cachedPreparedStatementWrappers
.
iterator
(),
new
Predicate
<
PreparedStatementExecutorWrapper
>()
{
@Override
public
boolean
apply
(
final
PreparedStatementExecutorWrapper
input
)
{
return
Objects
.
equals
(
input
.
getPreparedStatement
(),
preparedStatement
);
...
...
sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/executor/StatementExecutorTest.java
浏览文件 @
e2f40943
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录