Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
55126fe9
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 搜索 >>
提交
55126fe9
编写于
4月 18, 2016
作者:
T
terrymanu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor getProductDataBaseName
上级
d1a24df0
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
36 addition
and
76 deletion
+36
-76
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/ShardingDataSource.java
...dangdang/ddframe/rdb/sharding/api/ShardingDataSource.java
+24
-7
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/jdbc/ShardingConnection.java
...angdang/ddframe/rdb/sharding/jdbc/ShardingConnection.java
+12
-69
未找到文件。
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/ShardingDataSource.java
浏览文件 @
55126fe9
...
...
@@ -28,8 +28,11 @@ import com.dangdang.ddframe.rdb.sharding.metrics.MetricsContext;
import
com.dangdang.ddframe.rdb.sharding.router.SQLRouteEngine
;
import
com.google.common.base.Preconditions
;
import
javax.sql.DataSource
;
import
java.sql.Connection
;
import
java.sql.SQLException
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.Properties
;
/**
...
...
@@ -39,10 +42,10 @@ import java.util.Properties;
*/
public
class
ShardingDataSource
extends
AbstractDataSourceAdapter
{
private
final
ShardingContext
shardingContext
;
private
final
ShardingProperties
shardingProperties
;
private
final
ShardingContext
shardingContext
;
public
ShardingDataSource
(
final
ShardingRule
shardingRule
)
{
this
(
shardingRule
,
new
Properties
());
}
...
...
@@ -51,13 +54,27 @@ public class ShardingDataSource extends AbstractDataSourceAdapter {
Preconditions
.
checkNotNull
(
shardingRule
);
Preconditions
.
checkNotNull
(
props
);
shardingProperties
=
new
ShardingProperties
(
props
);
DatabaseType
type
;
try
{
type
=
DatabaseType
.
valueFrom
(
ShardingConnection
.
getDatabaseMetaDataFromDataSource
(
shardingRule
.
getDataSourceRule
().
getDataSources
()).
getDatabaseProductName
());
}
catch
(
final
SQLException
ex
)
{
throw
new
ShardingJdbcException
(
"Can not get database product name"
,
ex
);
shardingContext
=
new
ShardingContext
(
shardingRule
,
new
SQLRouteEngine
(
shardingRule
,
DatabaseType
.
valueFrom
(
getDatabaseProductName
(
shardingRule
))),
new
ExecutorEngine
(
shardingProperties
));
}
catch
(
SQLException
ex
)
{
throw
new
ShardingJdbcException
(
ex
);
}
}
private
String
getDatabaseProductName
(
final
ShardingRule
shardingRule
)
throws
SQLException
{
String
result
=
null
;
Collection
<
Connection
>
connections
=
new
ArrayList
<>(
shardingRule
.
getDataSourceRule
().
getDataSources
().
size
());
for
(
DataSource
each
:
shardingRule
.
getDataSourceRule
().
getDataSources
())
{
Connection
connection
=
each
.
getConnection
();
connections
.
add
(
connection
);
String
databaseProductName
=
connection
.
getMetaData
().
getDatabaseProductName
();
Preconditions
.
checkState
(
null
==
result
||
result
.
equals
(
databaseProductName
),
String
.
format
(
"Database type inconsistent with '%s' and '%s'"
,
result
,
databaseProductName
));
result
=
databaseProductName
;
}
for
(
Connection
each
:
connections
)
{
each
.
close
();
}
shardingContext
=
new
ShardingContext
(
shardingRule
,
new
SQLRouteEngine
(
shardingRule
,
type
),
new
ExecutorEngine
(
shardingProperties
))
;
return
result
;
}
@Override
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/jdbc/ShardingConnection.java
浏览文件 @
55126fe9
...
...
@@ -17,30 +17,24 @@
package
com.dangdang.ddframe.rdb.sharding.jdbc
;
import
java.sql.Connection
;
import
java.sql.DatabaseMetaData
;
import
java.sql.PreparedStatement
;
import
java.sql.SQLException
;
import
java.sql.Statement
;
import
java.util.Collection
;
import
java.util.HashMap
;
import
java.util.Map
;
import
javax.sql.DataSource
;
import
com.codahale.metrics.Timer.Context
;
import
com.dangdang.ddframe.rdb.sharding.api.rule.DataSourceRule
;
import
com.dangdang.ddframe.rdb.sharding.exception.ShardingJdbcException
;
import
com.dangdang.ddframe.rdb.sharding.jdbc.adapter.AbstractConnectionAdapter
;
import
com.dangdang.ddframe.rdb.sharding.metrics.MetricsContext
;
import
com.google.common.base.Function
;
import
com.google.common.base.Joiner
;
import
com.google.common.base.Preconditions
;
import
com.google.common.collect.Collections2
;
import
com.google.common.collect.Lists
;
import
lombok.AccessLevel
;
import
lombok.Getter
;
import
lombok.RequiredArgsConstructor
;
import
java.sql.Connection
;
import
java.sql.DatabaseMetaData
;
import
java.sql.PreparedStatement
;
import
java.sql.SQLException
;
import
java.sql.Statement
;
import
java.util.Collection
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* 支持分片的数据库连接.
*
...
...
@@ -77,61 +71,10 @@ public final class ShardingConnection extends AbstractConnectionAdapter {
public
DatabaseMetaData
getMetaData
()
throws
SQLException
{
if
(
connectionMap
.
isEmpty
())
{
DataSourceRule
dataSourceRule
=
shardingContext
.
getShardingRule
().
getDataSourceRule
();
String
dsName
=
dataSourceRule
.
getDataSourceNames
().
iterator
().
next
();
connectionMap
.
put
(
dsName
,
dataSourceRule
.
getDataSource
(
dsName
).
getConnection
());
}
return
getDatabaseMetaDataFromConnection
(
connectionMap
.
values
().
iterator
().
next
());
}
public
static
DatabaseMetaData
getDatabaseMetaDataFromDataSource
(
final
Collection
<
DataSource
>
dataSources
)
{
Collection
<
Connection
>
connections
=
null
;
try
{
connections
=
Collections2
.
transform
(
dataSources
,
new
Function
<
DataSource
,
Connection
>()
{
@Override
public
Connection
apply
(
final
DataSource
input
)
{
try
{
return
input
.
getConnection
();
}
catch
(
final
SQLException
ex
)
{
throw
new
ShardingJdbcException
(
ex
);
}
}
});
return
getDatabaseMetaDataFromConnection
(
connections
);
}
finally
{
if
(
null
!=
connections
)
{
for
(
Connection
each
:
connections
)
{
try
{
each
.
close
();
}
catch
(
final
SQLException
ignored
)
{
}
}
}
}
}
private
static
DatabaseMetaData
getDatabaseMetaDataFromConnection
(
final
Connection
connection
)
{
return
getDatabaseMetaDataFromConnection
(
Lists
.
newArrayList
(
connection
));
}
private
static
DatabaseMetaData
getDatabaseMetaDataFromConnection
(
final
Collection
<
Connection
>
connections
)
{
String
databaseProductName
=
null
;
DatabaseMetaData
result
=
null
;
for
(
Connection
each
:
connections
)
{
String
databaseProductNameInEach
;
DatabaseMetaData
metaDataInEach
;
try
{
metaDataInEach
=
each
.
getMetaData
();
databaseProductNameInEach
=
metaDataInEach
.
getDatabaseProductName
();
}
catch
(
final
SQLException
ex
)
{
throw
new
ShardingJdbcException
(
"Can not get data source DatabaseProductName"
,
ex
);
}
Preconditions
.
checkState
(
null
==
databaseProductName
||
databaseProductName
.
equals
(
databaseProductNameInEach
),
String
.
format
(
"Database type inconsistent with '%s' and '%s'"
,
databaseProductName
,
databaseProductNameInEach
));
databaseProductName
=
databaseProductNameInEach
;
result
=
metaDataInEach
;
String
dataSourceName
=
dataSourceRule
.
getDataSourceNames
().
iterator
().
next
();
connectionMap
.
put
(
dataSourceName
,
dataSourceRule
.
getDataSource
(
dataSourceName
).
getConnection
());
}
return
result
;
return
connectionMap
.
values
().
iterator
().
next
().
getMetaData
()
;
}
@Override
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录