Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
14a7e40a
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 搜索 >>
提交
14a7e40a
编写于
11月 14, 2016
作者:
G
gaohongtao
提交者:
gaohongtao
11月 14, 2016
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fixed #172 adjust Spring and Yaml config for id generator
上级
7bd1a975
变更
21
隐藏空白更改
内联
并排
Showing
21 changed file
with
480 addition
and
12 deletion
+480
-12
sharding-jdbc-config-parent/sharding-jdbc-config-common/src/main/java/com/dangdang/ddframe/rdb/sharding/config/common/api/ShardingRuleBuilder.java
...e/rdb/sharding/config/common/api/ShardingRuleBuilder.java
+26
-1
sharding-jdbc-config-parent/sharding-jdbc-config-common/src/main/java/com/dangdang/ddframe/rdb/sharding/config/common/api/config/ShardingRuleConfig.java
...sharding/config/common/api/config/ShardingRuleConfig.java
+6
-4
sharding-jdbc-config-parent/sharding-jdbc-config-common/src/main/java/com/dangdang/ddframe/rdb/sharding/config/common/api/config/TableRuleConfig.java
...db/sharding/config/common/api/config/TableRuleConfig.java
+5
-0
sharding-jdbc-config-parent/sharding-jdbc-config-common/src/test/java/com/dangdang/ddframe/rdb/sharding/config/common/api/ShardingRuleBuilderTest.java
...b/sharding/config/common/api/ShardingRuleBuilderTest.java
+17
-0
sharding-jdbc-config-parent/sharding-jdbc-config-common/src/test/java/com/dangdang/ddframe/rdb/sharding/config/common/fixture/AbstractNumberIdGenerator.java
...ding/config/common/fixture/AbstractNumberIdGenerator.java
+33
-0
sharding-jdbc-config-parent/sharding-jdbc-config-common/src/test/java/com/dangdang/ddframe/rdb/sharding/config/common/fixture/DecrementIdGenerator.java
.../sharding/config/common/fixture/DecrementIdGenerator.java
+26
-0
sharding-jdbc-config-parent/sharding-jdbc-config-common/src/test/java/com/dangdang/ddframe/rdb/sharding/config/common/fixture/IncrementIdGenerator.java
.../sharding/config/common/fixture/IncrementIdGenerator.java
+26
-0
sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/main/java/com/dangdang/ddframe/rdb/sharding/spring/namespace/constants/ShardingJdbcDataSourceBeanDefinitionParserTag.java
...stants/ShardingJdbcDataSourceBeanDefinitionParserTag.java
+8
-0
sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/main/java/com/dangdang/ddframe/rdb/sharding/spring/namespace/parser/ShardingJdbcDataSourceBeanDefinitionParser.java
...ce/parser/ShardingJdbcDataSourceBeanDefinitionParser.java
+18
-0
sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/main/resources/META-INF/namespace/rdb.xsd
...nfig-spring/src/main/resources/META-INF/namespace/rdb.xsd
+10
-0
sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/test/java/com/dangdang/ddframe/rdb/sharding/AllSpringTests.java
...ava/com/dangdang/ddframe/rdb/sharding/AllSpringTests.java
+3
-1
sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/test/java/com/dangdang/ddframe/rdb/sharding/spring/AutoIncrementDBUnitTest.java
.../ddframe/rdb/sharding/spring/AutoIncrementDBUnitTest.java
+45
-0
sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/test/java/com/dangdang/ddframe/rdb/sharding/spring/fixture/AbstractNumberIdGenerator.java
...db/sharding/spring/fixture/AbstractNumberIdGenerator.java
+33
-0
sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/test/java/com/dangdang/ddframe/rdb/sharding/spring/fixture/DecrementIdGenerator.java
...ame/rdb/sharding/spring/fixture/DecrementIdGenerator.java
+26
-0
sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/test/java/com/dangdang/ddframe/rdb/sharding/spring/fixture/IncrementIdGenerator.java
...ame/rdb/sharding/spring/fixture/IncrementIdGenerator.java
+26
-0
sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/test/resources/META-INF/rdb/namespace/withNamespaceAutoIncrementColumns.xml
...A-INF/rdb/namespace/withNamespaceAutoIncrementColumns.xml
+62
-0
sharding-jdbc-config-parent/sharding-jdbc-config-yaml/src/test/java/com/dangdang/ddframe/rdb/sharding/config/yaml/fixture/AbstractNumberIdGenerator.java
...arding/config/yaml/fixture/AbstractNumberIdGenerator.java
+33
-0
sharding-jdbc-config-parent/sharding-jdbc-config-yaml/src/test/java/com/dangdang/ddframe/rdb/sharding/config/yaml/fixture/DecrementIdGenerator.java
...db/sharding/config/yaml/fixture/DecrementIdGenerator.java
+26
-0
sharding-jdbc-config-parent/sharding-jdbc-config-yaml/src/test/java/com/dangdang/ddframe/rdb/sharding/config/yaml/fixture/IncrementIdGenerator.java
...db/sharding/config/yaml/fixture/IncrementIdGenerator.java
+26
-0
sharding-jdbc-config-parent/sharding-jdbc-config-yaml/src/test/resources/config/config-all.yaml
...dbc-config-yaml/src/test/resources/config/config-all.yaml
+6
-0
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/jdbc/ShardingStatement.java
...dangdang/ddframe/rdb/sharding/jdbc/ShardingStatement.java
+19
-6
未找到文件。
sharding-jdbc-config-parent/sharding-jdbc-config-common/src/main/java/com/dangdang/ddframe/rdb/sharding/config/common/api/ShardingRuleBuilder.java
浏览文件 @
14a7e40a
...
...
@@ -34,6 +34,7 @@ import com.dangdang.ddframe.rdb.sharding.config.common.api.config.TableRuleConfi
import
com.dangdang.ddframe.rdb.sharding.config.common.internal.algorithm.ClosureDatabaseShardingAlgorithm
;
import
com.dangdang.ddframe.rdb.sharding.config.common.internal.algorithm.ClosureTableShardingAlgorithm
;
import
com.dangdang.ddframe.rdb.sharding.config.common.internal.parser.InlineParser
;
import
com.dangdang.ddframe.rdb.sharding.id.generator.IdGenerator
;
import
com.dangdang.ddframe.rdb.sharding.router.strategy.MultipleKeysShardingAlgorithm
;
import
com.dangdang.ddframe.rdb.sharding.router.strategy.ShardingAlgorithm
;
import
com.dangdang.ddframe.rdb.sharding.router.strategy.ShardingStrategy
;
...
...
@@ -83,7 +84,11 @@ public final class ShardingRuleBuilder {
public
ShardingRule
build
()
{
DataSourceRule
dataSourceRule
=
buildDataSourceRule
();
Collection
<
TableRule
>
tableRules
=
buildTableRules
(
dataSourceRule
);
return
ShardingRule
.
builder
().
dataSourceRule
(
dataSourceRule
).
tableRules
(
tableRules
).
bindingTableRules
(
buildBindingTableRules
(
tableRules
))
com
.
dangdang
.
ddframe
.
rdb
.
sharding
.
api
.
rule
.
ShardingRule
.
ShardingRuleBuilder
shardingRuleBuilder
=
ShardingRule
.
builder
().
dataSourceRule
(
dataSourceRule
);
if
(!
Strings
.
isNullOrEmpty
(
shardingRuleConfig
.
getIdGeneratorClass
()))
{
shardingRuleBuilder
.
idGenerator
(
loadClass
(
shardingRuleConfig
.
getIdGeneratorClass
(),
IdGenerator
.
class
));
}
return
shardingRuleBuilder
.
tableRules
(
tableRules
).
bindingTableRules
(
buildBindingTableRules
(
tableRules
))
.
databaseShardingStrategy
(
buildShardingStrategy
(
shardingRuleConfig
.
getDefaultDatabaseStrategy
(),
DatabaseShardingStrategy
.
class
))
.
tableShardingStrategy
(
buildShardingStrategy
(
shardingRuleConfig
.
getDefaultTableStrategy
(),
TableShardingStrategy
.
class
)).
build
();
}
...
...
@@ -109,11 +114,22 @@ public final class ShardingRuleBuilder {
if
(!
Strings
.
isNullOrEmpty
(
tableRuleConfig
.
getDataSourceNames
()))
{
tableRuleBuilder
.
dataSourceNames
(
new
InlineParser
(
tableRuleConfig
.
getDataSourceNames
()).
evaluate
());
}
buildAutoIncrementColumn
(
tableRuleBuilder
,
tableRuleConfig
);
result
.
add
(
tableRuleBuilder
.
build
());
}
return
result
;
}
private
void
buildAutoIncrementColumn
(
final
TableRule
.
TableRuleBuilder
tableRuleBuilder
,
final
TableRuleConfig
tableRuleConfig
)
{
for
(
Entry
<
String
,
String
>
each
:
tableRuleConfig
.
getAutoIncrementColumns
().
entrySet
())
{
if
(
null
==
each
.
getValue
())
{
tableRuleBuilder
.
autoIncrementColumns
(
each
.
getKey
());
}
else
{
tableRuleBuilder
.
autoIncrementColumns
(
each
.
getKey
(),
loadClass
(
each
.
getValue
(),
IdGenerator
.
class
));
}
}
}
private
Collection
<
BindingTableRule
>
buildBindingTableRules
(
final
Collection
<
TableRule
>
tableRules
)
{
Collection
<
BindingTableRule
>
result
=
new
ArrayList
<>(
shardingRuleConfig
.
getBindingTables
().
size
());
for
(
BindingTableRuleConfig
each
:
shardingRuleConfig
.
getBindingTables
())
{
...
...
@@ -174,4 +190,13 @@ public final class ShardingRuleBuilder {
return
returnClass
.
isAssignableFrom
(
DatabaseShardingStrategy
.
class
)
?
(
T
)
new
DatabaseShardingStrategy
(
shardingColumns
,
(
MultipleKeysDatabaseShardingAlgorithm
)
shardingAlgorithm
)
:
(
T
)
new
TableShardingStrategy
(
shardingColumns
,
(
MultipleKeysTableShardingAlgorithm
)
shardingAlgorithm
);
}
@SuppressWarnings
(
"unchecked"
)
private
<
T
>
Class
<?
extends
T
>
loadClass
(
final
String
className
,
final
Class
<
T
>
superClass
)
{
try
{
return
(
Class
<?
extends
T
>)
Class
.
forName
(
className
);
}
catch
(
final
ClassNotFoundException
ex
)
{
throw
new
IllegalArgumentException
(
ex
);
}
}
}
sharding-jdbc-config-parent/sharding-jdbc-config-common/src/main/java/com/dangdang/ddframe/rdb/sharding/config/common/api/config/ShardingRuleConfig.java
浏览文件 @
14a7e40a
...
...
@@ -17,14 +17,14 @@
package
com.dangdang.ddframe.rdb.sharding.config.common.api.config
;
import
lombok.Getter
;
import
lombok.Setter
;
import
javax.sql.DataSource
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
javax.sql.DataSource
;
import
lombok.Getter
;
import
lombok.Setter
;
/**
* 分片规则配置.
...
...
@@ -46,4 +46,6 @@ public class ShardingRuleConfig {
private
StrategyConfig
defaultDatabaseStrategy
;
private
StrategyConfig
defaultTableStrategy
;
private
String
idGeneratorClass
;
}
sharding-jdbc-config-parent/sharding-jdbc-config-common/src/main/java/com/dangdang/ddframe/rdb/sharding/config/common/api/config/TableRuleConfig.java
浏览文件 @
14a7e40a
...
...
@@ -20,6 +20,9 @@ package com.dangdang.ddframe.rdb.sharding.config.common.api.config;
import
lombok.Getter
;
import
lombok.Setter
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* 表规则配置.
*
...
...
@@ -38,4 +41,6 @@ public class TableRuleConfig {
private
StrategyConfig
databaseStrategy
;
private
StrategyConfig
tableStrategy
;
private
Map
<
String
,
String
>
autoIncrementColumns
=
new
HashMap
<>();
}
sharding-jdbc-config-parent/sharding-jdbc-config-common/src/test/java/com/dangdang/ddframe/rdb/sharding/config/common/api/ShardingRuleBuilderTest.java
浏览文件 @
14a7e40a
...
...
@@ -68,6 +68,18 @@ public final class ShardingRuleBuilderTest {
shardingRuleConfig
.
setDefaultDatabaseStrategy
(
getDatabaseStrategyConfig
(
"xxx.Algorithm"
));
new
ShardingRuleBuilder
(
shardingRuleConfig
).
build
();
}
@Test
(
expected
=
IllegalArgumentException
.
class
)
public
void
assertBuildFailureWhenAutoIncrementClassNotExisted
()
{
ShardingRuleConfig
shardingRuleConfig
=
new
ShardingRuleConfig
();
shardingRuleConfig
.
setDataSource
(
createDataSourceMap
());
shardingRuleConfig
.
setDefaultDataSourceName
(
"ds_0"
);
shardingRuleConfig
.
setTables
(
createTableRuleConfigMap
());
shardingRuleConfig
.
setIdGeneratorClass
(
"not.existed"
);
shardingRuleConfig
.
setBindingTables
(
Collections
.
singletonList
(
createBindingTableRule
(
"t_order"
,
"t_order_item"
)));
shardingRuleConfig
.
setDefaultDatabaseStrategy
(
getDatabaseStrategyConfig
(
SingleAlgorithm
.
class
.
getName
()));
shardingRuleConfig
.
setDefaultTableStrategy
(
getTableStrategyConfigForAlgorithmClass
());
new
ShardingRuleBuilder
(
shardingRuleConfig
).
build
();
}
@Test
public
void
assertBuildSuccess
()
{
...
...
@@ -75,6 +87,7 @@ public final class ShardingRuleBuilderTest {
shardingRuleConfig
.
setDataSource
(
createDataSourceMap
());
shardingRuleConfig
.
setDefaultDataSourceName
(
"ds_0"
);
shardingRuleConfig
.
setTables
(
createTableRuleConfigMap
());
shardingRuleConfig
.
setIdGeneratorClass
(
"com.dangdang.ddframe.rdb.sharding.config.common.fixture.IncrementIdGenerator"
);
shardingRuleConfig
.
setBindingTables
(
Collections
.
singletonList
(
createBindingTableRule
(
"t_order"
,
"t_order_item"
)));
shardingRuleConfig
.
setDefaultDatabaseStrategy
(
getDatabaseStrategyConfig
(
SingleAlgorithm
.
class
.
getName
()));
shardingRuleConfig
.
setDefaultTableStrategy
(
getTableStrategyConfigForAlgorithmClass
());
...
...
@@ -144,6 +157,10 @@ public final class ShardingRuleBuilderTest {
result
.
setDataSourceNames
(
"ds_${0..1}"
);
result
.
setDatabaseStrategy
(
getDatabaseStrategyConfig
(
SingleAlgorithm
.
class
.
getName
()));
result
.
setTableStrategy
(
getTableStrategyConfigForExpression
());
Map
<
String
,
String
>
autoIncrementColumnMap
=
new
HashMap
<>();
autoIncrementColumnMap
.
put
(
"order_id"
,
null
);
autoIncrementColumnMap
.
put
(
"order_item_id"
,
"com.dangdang.ddframe.rdb.sharding.config.common.fixture.DecrementIdGenerator"
);
result
.
setAutoIncrementColumns
(
autoIncrementColumnMap
);
return
result
;
}
...
...
sharding-jdbc-config-parent/sharding-jdbc-config-common/src/test/java/com/dangdang/ddframe/rdb/sharding/config/common/fixture/AbstractNumberIdGenerator.java
0 → 100644
浏览文件 @
14a7e40a
/*
* 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.config.common.fixture
;
import
com.dangdang.ddframe.rdb.sharding.id.generator.IdGenerator
;
import
java.util.concurrent.atomic.AtomicInteger
;
abstract
class
AbstractNumberIdGenerator
implements
IdGenerator
{
final
AtomicInteger
sequence
=
new
AtomicInteger
(
100
);
@Override
public
void
initContext
(
final
String
tableName
,
final
String
columnName
)
{
}
}
sharding-jdbc-config-parent/sharding-jdbc-config-common/src/test/java/com/dangdang/ddframe/rdb/sharding/config/common/fixture/DecrementIdGenerator.java
0 → 100644
浏览文件 @
14a7e40a
/*
* 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.config.common.fixture
;
public
class
DecrementIdGenerator
extends
AbstractNumberIdGenerator
{
@Override
public
Object
generateId
()
{
return
sequence
.
decrementAndGet
();
}
}
sharding-jdbc-config-parent/sharding-jdbc-config-common/src/test/java/com/dangdang/ddframe/rdb/sharding/config/common/fixture/IncrementIdGenerator.java
0 → 100644
浏览文件 @
14a7e40a
/*
* 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.config.common.fixture
;
public
class
IncrementIdGenerator
extends
AbstractNumberIdGenerator
{
@Override
public
Object
generateId
()
{
return
sequence
.
incrementAndGet
();
}
}
sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/main/java/com/dangdang/ddframe/rdb/sharding/spring/namespace/constants/ShardingJdbcDataSourceBeanDefinitionParserTag.java
浏览文件 @
14a7e40a
...
...
@@ -61,4 +61,12 @@ public final class ShardingJdbcDataSourceBeanDefinitionParserTag {
public
static
final
String
DEFAULT_DATABASE_STRATEGY_ATTRIBUTE
=
"default-database-strategy"
;
public
static
final
String
DEFAULT_TABLE_STRATEGY_ATTRIBUTE
=
"default-table-strategy"
;
public
static
final
String
AUTO_INCREMENT_COLUMN
=
"auto-increment-column"
;
public
static
final
String
COLUMN_NAME
=
"column-name"
;
public
static
final
String
COLUMN_ID_GENERATOR_CLASS
=
"column-id-generator-class"
;
public
static
final
String
ID_GENERATOR_CLASS
=
"id-generator-class"
;
}
sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/main/java/com/dangdang/ddframe/rdb/sharding/spring/namespace/parser/ShardingJdbcDataSourceBeanDefinitionParser.java
浏览文件 @
14a7e40a
...
...
@@ -65,9 +65,17 @@ public class ShardingJdbcDataSourceBeanDefinitionParser extends AbstractBeanDefi
factory
.
addPropertyValue
(
"bindingTables"
,
parseBindingTablesConfig
(
shardingRuleElement
));
factory
.
addPropertyValue
(
"defaultDatabaseStrategy"
,
parseDefaultDatabaseStrategyConfig
(
shardingRuleElement
));
factory
.
addPropertyValue
(
"defaultTableStrategy"
,
parseDefaultTableStrategyConfig
(
shardingRuleElement
));
parseIdGenerator
(
factory
,
shardingRuleElement
);
return
factory
.
getBeanDefinition
();
}
private
void
parseIdGenerator
(
final
BeanDefinitionBuilder
factory
,
final
Element
element
)
{
String
idGeneratorClass
=
element
.
getAttribute
(
ShardingJdbcDataSourceBeanDefinitionParserTag
.
ID_GENERATOR_CLASS
);
if
(!
Strings
.
isNullOrEmpty
(
idGeneratorClass
))
{
factory
.
addPropertyValue
(
"idGeneratorClass"
,
idGeneratorClass
);
}
}
private
Map
<
String
,
BeanDefinition
>
parseDataSources
(
final
Element
element
,
final
ParserContext
parserContext
)
{
List
<
String
>
dataSources
=
Splitter
.
on
(
","
).
trimResults
().
splitToList
(
element
.
getAttribute
(
ShardingJdbcDataSourceBeanDefinitionParserTag
.
DATA_SOURCES_TAG
));
Map
<
String
,
BeanDefinition
>
result
=
new
ManagedMap
<>(
dataSources
.
size
());
...
...
@@ -116,6 +124,16 @@ public class ShardingJdbcDataSourceBeanDefinitionParser extends AbstractBeanDefi
if
(!
Strings
.
isNullOrEmpty
(
tableStrategy
))
{
factory
.
addPropertyReference
(
"tableStrategy"
,
tableStrategy
);
}
List
<
Element
>
autoIncrementColumns
=
DomUtils
.
getChildElementsByTagName
(
tableElement
,
ShardingJdbcDataSourceBeanDefinitionParserTag
.
AUTO_INCREMENT_COLUMN
);
if
(
null
==
autoIncrementColumns
||
autoIncrementColumns
.
isEmpty
())
{
return
factory
.
getBeanDefinition
();
}
Map
<
String
,
String
>
autoIncrementColumnMap
=
new
ManagedMap
<>(
autoIncrementColumns
.
size
());
for
(
Element
each
:
autoIncrementColumns
)
{
autoIncrementColumnMap
.
put
(
each
.
getAttribute
(
ShardingJdbcDataSourceBeanDefinitionParserTag
.
COLUMN_NAME
),
Strings
.
emptyToNull
(
each
.
getAttribute
(
ShardingJdbcDataSourceBeanDefinitionParserTag
.
COLUMN_ID_GENERATOR_CLASS
)));
}
factory
.
addPropertyValue
(
"autoIncrementColumns"
,
autoIncrementColumnMap
);
return
factory
.
getBeanDefinition
();
}
...
...
sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/main/resources/META-INF/namespace/rdb.xsd
浏览文件 @
14a7e40a
...
...
@@ -25,6 +25,7 @@
</xsd:sequence>
<xsd:attribute
name=
"data-sources"
type=
"xsd:string"
use=
"required"
/>
<xsd:attribute
name=
"default-data-source"
type=
"xsd:string"
use=
"optional"
/>
<xsd:attribute
name=
"id-generator-class"
type=
"xsd:string"
use=
"optional"
/>
</xsd:complexType>
</xsd:element>
<xsd:element
name=
"table-rules"
>
...
...
@@ -36,6 +37,9 @@
</xsd:element>
<xsd:element
name=
"table-rule"
>
<xsd:complexType>
<xsd:sequence>
<xsd:element
ref=
"auto-increment-column"
minOccurs=
"0"
maxOccurs=
"unbounded"
/>
</xsd:sequence>
<xsd:attribute
name=
"logic-table"
type=
"xsd:string"
use=
"required"
/>
<xsd:attribute
name=
"dynamic"
type=
"xsd:string"
use=
"optional"
/>
<xsd:attribute
name=
"actual-tables"
type=
"xsd:string"
use=
"optional"
/>
...
...
@@ -44,6 +48,12 @@
<xsd:attribute
name=
"table-strategy"
type=
"xsd:string"
use=
"optional"
/>
</xsd:complexType>
</xsd:element>
<xsd:element
name=
"auto-increment-column"
>
<xsd:complexType>
<xsd:attribute
name=
"column-name"
type=
"xsd:string"
use=
"required"
/>
<xsd:attribute
name=
"column-id-generator-class"
type=
"xsd:string"
use=
"optional"
/>
</xsd:complexType>
</xsd:element>
<xsd:element
name=
"binding-table-rules"
>
<xsd:complexType>
<xsd:sequence>
...
...
sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/test/java/com/dangdang/ddframe/rdb/sharding/AllSpringTests.java
浏览文件 @
14a7e40a
...
...
@@ -17,6 +17,7 @@
package
com.dangdang.ddframe.rdb.sharding
;
import
com.dangdang.ddframe.rdb.sharding.spring.AutoIncrementDBUnitTest
;
import
com.dangdang.ddframe.rdb.sharding.spring.cases.WithoutNamespaceDefaultStrategyTest
;
import
com.dangdang.ddframe.rdb.sharding.spring.cases.WithoutNamespaceTest
;
import
com.dangdang.ddframe.rdb.sharding.spring.cases.namespace.WithNamespaceAlgorithmClassAndPropsTest
;
...
...
@@ -45,7 +46,8 @@ import org.junit.runners.Suite.SuiteClasses;
WithoutNamespaceDefaultStrategyTest
.
class
,
WithNamespaceDifferentTablesTest
.
class
,
WithNamespaceForIndicatedDataSourceNamesTest
.
class
,
WithNamespaceForMasterSlaveTest
.
class
WithNamespaceForMasterSlaveTest
.
class
,
AutoIncrementDBUnitTest
.
class
,
})
public
class
AllSpringTests
{
}
sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/test/java/com/dangdang/ddframe/rdb/sharding/spring/AutoIncrementDBUnitTest.java
0 → 100644
浏览文件 @
14a7e40a
/*
* 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.spring
;
import
org.junit.Test
;
import
org.springframework.test.context.ContextConfiguration
;
import
java.sql.Connection
;
import
java.sql.SQLException
;
import
java.sql.Statement
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
junit
.
Assert
.
assertTrue
;
@ContextConfiguration
(
locations
=
"classpath:META-INF/rdb/namespace/withNamespaceAutoIncrementColumns.xml"
)
public
class
AutoIncrementDBUnitTest
extends
AbstractSpringDBUnitTest
{
@Test
public
void
test
()
throws
SQLException
{
try
(
Connection
connection
=
getShardingDataSource
().
getConnection
();
Statement
statement
=
connection
.
createStatement
())
{
statement
.
execute
(
"INSERT INTO `t_order` (`user_id`, `status`) VALUES (1, 'init')"
,
Statement
.
RETURN_GENERATED_KEYS
);
assertTrue
(
statement
.
getGeneratedKeys
().
next
());
assertEquals
(
statement
.
getGeneratedKeys
().
getLong
(
1
),
101L
);
statement
.
execute
(
"INSERT INTO `t_order_item` (`order_id`, `user_id`, `status`) VALUES (101, 1, 'init')"
,
Statement
.
RETURN_GENERATED_KEYS
);
assertTrue
(
statement
.
getGeneratedKeys
().
next
());
assertEquals
(
statement
.
getGeneratedKeys
().
getLong
(
1
),
99L
);
}
}
}
sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/test/java/com/dangdang/ddframe/rdb/sharding/spring/fixture/AbstractNumberIdGenerator.java
0 → 100644
浏览文件 @
14a7e40a
/*
* 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.spring.fixture
;
import
com.dangdang.ddframe.rdb.sharding.id.generator.IdGenerator
;
import
java.util.concurrent.atomic.AtomicInteger
;
abstract
class
AbstractNumberIdGenerator
implements
IdGenerator
{
final
AtomicInteger
sequence
=
new
AtomicInteger
(
100
);
@Override
public
void
initContext
(
final
String
tableName
,
final
String
columnName
)
{
}
}
sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/test/java/com/dangdang/ddframe/rdb/sharding/spring/fixture/DecrementIdGenerator.java
0 → 100644
浏览文件 @
14a7e40a
/*
* 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.spring.fixture
;
public
class
DecrementIdGenerator
extends
AbstractNumberIdGenerator
{
@Override
public
Object
generateId
()
{
return
sequence
.
decrementAndGet
();
}
}
sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/test/java/com/dangdang/ddframe/rdb/sharding/spring/fixture/IncrementIdGenerator.java
0 → 100644
浏览文件 @
14a7e40a
/*
* 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.spring.fixture
;
public
class
IncrementIdGenerator
extends
AbstractNumberIdGenerator
{
@Override
public
Object
generateId
()
{
return
sequence
.
incrementAndGet
();
}
}
sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/test/resources/META-INF/rdb/namespace/withNamespaceAutoIncrementColumns.xml
0 → 100644
浏览文件 @
14a7e40a
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ 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>
-->
<beans
xmlns=
"http://www.springframework.org/schema/beans"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:context=
"http://www.springframework.org/schema/context"
xmlns:rdb=
"http://www.dangdang.com/schema/ddframe/rdb"
xsi:schemaLocation=
"http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.dangdang.com/schema/ddframe/rdb
http://www.dangdang.com/schema/ddframe/rdb/rdb.xsd
"
>
<context:property-placeholder
location=
"classpath:conf/rdb/conf.properties"
ignore-unresolvable=
"true"
/>
<bean
id=
"dbtbl_0"
class=
"org.apache.commons.dbcp.BasicDataSource"
destroy-method=
"close"
>
<property
name=
"driverClassName"
value=
"org.h2.Driver"
/>
<property
name=
"url"
value=
"jdbc:h2:mem:dbtbl_0;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL"
/>
<property
name=
"username"
value=
"sa"
/>
<property
name=
"password"
value=
""
/>
</bean>
<bean
id=
"dbtbl_1"
class=
"org.apache.commons.dbcp.BasicDataSource"
destroy-method=
"close"
>
<property
name=
"driverClassName"
value=
"org.h2.Driver"
/>
<property
name=
"url"
value=
"jdbc:h2:mem:dbtbl_1;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL"
/>
<property
name=
"username"
value=
"sa"
/>
<property
name=
"password"
value=
""
/>
</bean>
<rdb:strategy
id=
"databaseStrategy"
sharding-columns=
"user_id"
algorithm-class=
"com.dangdang.ddframe.rdb.sharding.spring.algorithm.SingleKeyModuloDatabaseShardingAlgorithm"
/>
<rdb:strategy
id=
"tableStrategy"
sharding-columns=
"order_id"
algorithm-class=
"com.dangdang.ddframe.rdb.sharding.spring.algorithm.SingleKeyModuloTableShardingAlgorithm"
/>
<rdb:data-source
id=
"shardingDataSource"
>
<rdb:sharding-rule
data-sources=
"dbtbl_0,dbtbl_1"
default-data-source=
"dbtbl_0"
id-generator-class=
"com.dangdang.ddframe.rdb.sharding.spring.fixture.IncrementIdGenerator"
>
<rdb:table-rules>
<rdb:table-rule
logic-table=
"t_order"
actual-tables=
"t_order_${0..3}"
database-strategy=
"databaseStrategy"
table-strategy=
"tableStrategy"
>
<rdb:auto-increment-column
column-name=
"order_id"
/>
</rdb:table-rule>
<rdb:table-rule
logic-table=
"t_order_item"
actual-tables=
"t_order_item_${0..3}"
database-strategy=
"databaseStrategy"
table-strategy=
"tableStrategy"
>
<rdb:auto-increment-column
column-name=
"order_item_id"
column-id-generator-class=
"com.dangdang.ddframe.rdb.sharding.spring.fixture.DecrementIdGenerator"
/>
</rdb:table-rule>
</rdb:table-rules>
</rdb:sharding-rule>
</rdb:data-source>
</beans>
sharding-jdbc-config-parent/sharding-jdbc-config-yaml/src/test/java/com/dangdang/ddframe/rdb/sharding/config/yaml/fixture/AbstractNumberIdGenerator.java
0 → 100644
浏览文件 @
14a7e40a
/*
* 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.config.yaml.fixture
;
import
com.dangdang.ddframe.rdb.sharding.id.generator.IdGenerator
;
import
java.util.concurrent.atomic.AtomicInteger
;
abstract
class
AbstractNumberIdGenerator
implements
IdGenerator
{
final
AtomicInteger
sequence
=
new
AtomicInteger
(
100
);
@Override
public
void
initContext
(
final
String
tableName
,
final
String
columnName
)
{
}
}
sharding-jdbc-config-parent/sharding-jdbc-config-yaml/src/test/java/com/dangdang/ddframe/rdb/sharding/config/yaml/fixture/DecrementIdGenerator.java
0 → 100644
浏览文件 @
14a7e40a
/*
* 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.config.yaml.fixture
;
public
class
DecrementIdGenerator
extends
AbstractNumberIdGenerator
{
@Override
public
Object
generateId
()
{
return
sequence
.
decrementAndGet
();
}
}
sharding-jdbc-config-parent/sharding-jdbc-config-yaml/src/test/java/com/dangdang/ddframe/rdb/sharding/config/yaml/fixture/IncrementIdGenerator.java
0 → 100644
浏览文件 @
14a7e40a
/*
* 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.config.yaml.fixture
;
public
class
IncrementIdGenerator
extends
AbstractNumberIdGenerator
{
@Override
public
Object
generateId
()
{
return
sequence
.
incrementAndGet
();
}
}
sharding-jdbc-config-parent/sharding-jdbc-config-yaml/src/test/resources/config/config-all.yaml
浏览文件 @
14a7e40a
...
...
@@ -13,6 +13,8 @@ dataSource:
maxActive
:
100
defaultDataSourceName
:
db0
idGeneratorClass
:
com.dangdang.ddframe.rdb.sharding.config.yaml.fixture.IncrementIdGenerator
tables
:
config
:
...
...
@@ -21,6 +23,8 @@ tables:
t_order
:
actualTables
:
t_order_${0..1}
autoIncrementColumns
:
order_id
:
databaseStrategy
:
&db001
shardingColumns
:
order_id
algorithmClassName
:
com.dangdang.ddframe.rdb.sharding.config.yaml.algorithm.SingleAlgorithm
...
...
@@ -30,6 +34,8 @@ tables:
t_order_item
:
actualTables
:
t_order_item_${0..1}
autoIncrementColumns
:
order_item_id
:
com.dangdang.ddframe.rdb.sharding.config.yaml.fixture.DecrementIdGenerator
#绑定表中其余的表的策略与第一张表的策略相同
databaseStrategy
:
*db001
tableStrategy
:
*table001
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/jdbc/ShardingStatement.java
浏览文件 @
14a7e40a
...
...
@@ -129,7 +129,10 @@ public class ShardingStatement extends AbstractStatementAdapter {
try
{
return
generateExecutor
(
sql
).
executeUpdate
(
autoGeneratedKeys
);
}
finally
{
generatedKeyContext
.
setAutoGeneratedKeys
(
autoGeneratedKeys
);
if
(
null
!=
generatedKeyContext
)
{
generatedKeyContext
.
setAutoGeneratedKeys
(
autoGeneratedKeys
);
}
clearRouteContext
();
}
}
...
...
@@ -139,7 +142,9 @@ public class ShardingStatement extends AbstractStatementAdapter {
try
{
return
generateExecutor
(
sql
).
executeUpdate
(
columnIndexes
);
}
finally
{
generatedKeyContext
.
setColumnIndexes
(
columnIndexes
);
if
(
null
!=
generatedKeyContext
)
{
generatedKeyContext
.
setColumnIndexes
(
columnIndexes
);
}
clearRouteContext
();
}
}
...
...
@@ -149,7 +154,9 @@ public class ShardingStatement extends AbstractStatementAdapter {
try
{
return
generateExecutor
(
sql
).
executeUpdate
(
columnNames
);
}
finally
{
generatedKeyContext
.
setColumnNames
(
columnNames
);
if
(
null
!=
generatedKeyContext
)
{
generatedKeyContext
.
setColumnNames
(
columnNames
);
}
clearRouteContext
();
}
}
...
...
@@ -168,7 +175,9 @@ public class ShardingStatement extends AbstractStatementAdapter {
try
{
return
generateExecutor
(
sql
).
execute
(
autoGeneratedKeys
);
}
finally
{
generatedKeyContext
.
setAutoGeneratedKeys
(
autoGeneratedKeys
);
if
(
null
!=
generatedKeyContext
)
{
generatedKeyContext
.
setAutoGeneratedKeys
(
autoGeneratedKeys
);
}
clearRouteContext
();
}
}
...
...
@@ -178,7 +187,9 @@ public class ShardingStatement extends AbstractStatementAdapter {
try
{
return
generateExecutor
(
sql
).
execute
(
columnIndexes
);
}
finally
{
generatedKeyContext
.
setColumnIndexes
(
columnIndexes
);
if
(
null
!=
generatedKeyContext
)
{
generatedKeyContext
.
setColumnIndexes
(
columnIndexes
);
}
clearRouteContext
();
}
}
...
...
@@ -188,7 +199,9 @@ public class ShardingStatement extends AbstractStatementAdapter {
try
{
return
generateExecutor
(
sql
).
execute
(
columnNames
);
}
finally
{
generatedKeyContext
.
setColumnNames
(
columnNames
);
if
(
null
!=
generatedKeyContext
)
{
generatedKeyContext
.
setColumnNames
(
columnNames
);
}
clearRouteContext
();
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录