Skip to content

Commit 5f4b92d

Browse files
committed
fix #80
1 parent 4695545 commit 5f4b92d

File tree

36 files changed

+196
-85
lines changed

36 files changed

+196
-85
lines changed

sharding-jdbc-config-parent/sharding-jdbc-config-common/src/main/java/com/dangdang/ddframe/rdb/sharding/config/common/api/ShardingRuleBuilder.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,8 @@ public ShardingRule build() {
9090

9191
private DataSourceRule buildDataSourceRule() {
9292
Preconditions.checkArgument(!shardingRuleConfig.getDataSource().isEmpty() || MapUtils.isNotEmpty(externalDataSourceMap), "Sharding JDBC: No data source config");
93-
return !shardingRuleConfig.getDataSource().isEmpty() ? new DataSourceRule(shardingRuleConfig.getDataSource()) : new DataSourceRule(externalDataSourceMap);
93+
return shardingRuleConfig.getDataSource().isEmpty() ? new DataSourceRule(externalDataSourceMap, shardingRuleConfig.getDefaultDataSourceName())
94+
: new DataSourceRule(shardingRuleConfig.getDataSource(), shardingRuleConfig.getDefaultDataSourceName());
9495
}
9596

9697
private Collection<TableRule> buildTableRules(final DataSourceRule dataSourceRule) {

sharding-jdbc-config-parent/sharding-jdbc-config-common/src/main/java/com/dangdang/ddframe/rdb/sharding/config/common/api/config/ShardingRuleConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ public class ShardingRuleConfig {
3737

3838
private Map<String, DataSource> dataSource = new HashMap<>();
3939

40+
private String defaultDataSourceName;
41+
4042
private Map<String, TableRuleConfig> tables = new HashMap<>();
4143

4244
private List<BindingTableRuleConfig> bindingTables = new ArrayList<>();

sharding-jdbc-config-parent/sharding-jdbc-config-common/src/test/java/com/dangdang/ddframe/rdb/sharding/config/common/api/ShardingRuleBuilderTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ public void testAll() {
4949
assertThat(shardingRule.getTableRules().size(), is(3));
5050
assertThat(shardingRule.getBindingTableRules().size(), is(1));
5151
assertThat(Arrays.asList(shardingRule.getTableRules().toArray()), hasItems(shardingRule.getBindingTableRules().iterator().next().getTableRules().toArray()));
52+
assertThat(shardingRule.getDataSourceRule().getDefaultDataSourceName(), is("db0"));
5253
}
5354

5455
@Test

sharding-jdbc-config-parent/sharding-jdbc-config-common/src/test/resources/config/config-all.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ dataSource:
1212
password:
1313
maxActive: 100
1414

15+
defaultDataSourceName: db0
16+
1517
tables:
1618
config:
1719
actualTables: config_${0..1}

sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/main/java/com/dangdang/ddframe/rdb/sharding/spring/namespace/constants/ShardingJdbcDataSourceBeanDefinitionParserTag.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ public final class ShardingJdbcDataSourceBeanDefinitionParserTag {
3434

3535
public static final String DATA_SOURCES_TAG = "data-sources";
3636

37+
public static final String DEFAULT_DATA_SOURCE_TAG = "default-data-source";
38+
3739
public static final String TABLE_RULES_TAG = "table-rules";
3840

3941
public static final String TABLE_RULE_TAG = "table-rule";

sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/main/java/com/dangdang/ddframe/rdb/sharding/spring/namespace/parser/ShardingJdbcDataSourceBeanDefinitionParser.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,6 @@
1717

1818
package com.dangdang.ddframe.rdb.sharding.spring.namespace.parser;
1919

20-
import java.util.Collections;
21-
import java.util.List;
22-
import java.util.Map;
23-
import java.util.Properties;
24-
2520
import com.dangdang.ddframe.rdb.sharding.config.common.api.config.BindingTableRuleConfig;
2621
import com.dangdang.ddframe.rdb.sharding.config.common.api.config.ShardingRuleConfig;
2722
import com.dangdang.ddframe.rdb.sharding.config.common.api.config.TableRuleConfig;
@@ -39,6 +34,11 @@
3934
import org.springframework.util.xml.DomUtils;
4035
import org.w3c.dom.Element;
4136

37+
import java.util.Collections;
38+
import java.util.List;
39+
import java.util.Map;
40+
import java.util.Properties;
41+
4242
/**
4343
* 基于Spring命名空间的数据源解析器.
4444
*
@@ -60,6 +60,7 @@ private BeanDefinition parseShardingRuleConfig(final Element element, final Pars
6060
Element shardingRuleElement = DomUtils.getChildElementByTagName(element, ShardingJdbcDataSourceBeanDefinitionParserTag.SHARDING_RULE_CONFIG_TAG);
6161
BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(ShardingRuleConfig.class);
6262
factory.addPropertyValue("dataSource", parseDataSources(shardingRuleElement, parserContext));
63+
parseDefaultDataSource(factory, shardingRuleElement);
6364
factory.addPropertyValue("tables", parseTableRulesConfig(shardingRuleElement));
6465
factory.addPropertyValue("bindingTables", parseBindingTablesConfig(shardingRuleElement));
6566
factory.addPropertyValue("defaultDatabaseStrategy", parseDefaultDatabaseStrategyConfig(shardingRuleElement));
@@ -76,6 +77,13 @@ private Map<String, BeanDefinition> parseDataSources(final Element element, fina
7677
return result;
7778
}
7879

80+
private void parseDefaultDataSource(final BeanDefinitionBuilder factory, final Element element) {
81+
String defaultDataSource = element.getAttribute(ShardingJdbcDataSourceBeanDefinitionParserTag.DEFAULT_DATA_SOURCE_TAG);
82+
if (!Strings.isNullOrEmpty(defaultDataSource)) {
83+
factory.addPropertyValue("defaultDataSourceName", defaultDataSource);
84+
}
85+
}
86+
7987
private Map<String, BeanDefinition> parseTableRulesConfig(final Element element) {
8088
Element tableRulesElement = DomUtils.getChildElementByTagName(element, ShardingJdbcDataSourceBeanDefinitionParserTag.TABLE_RULES_TAG);
8189
List<Element> tableRuleElements = DomUtils.getChildElementsByTagName(tableRulesElement, ShardingJdbcDataSourceBeanDefinitionParserTag.TABLE_RULE_TAG);

sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/main/resources/META-INF/namespace/rdb.xsd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
<xsd:element ref="default-table-strategy" minOccurs="0" maxOccurs="1"/>
2525
</xsd:sequence>
2626
<xsd:attribute name="data-sources" type="xsd:string" use="required" />
27+
<xsd:attribute name="default-data-source" type="xsd:string" use="optional" />
2728
</xsd:complexType>
2829
</xsd:element>
2930
<xsd:element name="table-rules">

sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/test/java/com/dangdang/ddframe/rdb/sharding/spring/AbstractShardingBothDataBasesAndTablesSpringDBUnitTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public void testWithAllPlaceholders() throws SQLException {
3838
private void insertData() throws SQLException {
3939
String orderSql = "INSERT INTO `t_order` (`order_id`, `user_id`, `status`) VALUES (?, ?, ?)";
4040
String orderItemSql = "INSERT INTO `t_order_item` (`order_item_id`, `order_id`, `user_id`, `status`) VALUES (?, ?, ?, ?)";
41+
String configSql = "INSERT INTO `t_config` (`id`, `status`) VALUES (?, ?)";
4142
for (int orderId = 1; orderId <= 4; orderId++) {
4243
for (int userId = 1; userId <= 2; userId++) {
4344
try (Connection connection = getShardingDataSource().getConnection()) {
@@ -63,6 +64,13 @@ private void insertData() throws SQLException {
6364
preparedStatement.setString(4, "insert");
6465
preparedStatement.execute();
6566
preparedStatement.close();
67+
68+
69+
preparedStatement = connection.prepareStatement(configSql);
70+
preparedStatement.setInt(1, new Long(System.nanoTime()).intValue());
71+
preparedStatement.setString(2, "insert");
72+
preparedStatement.execute();
73+
preparedStatement.close();
6674
}
6775
}
6876
}
@@ -91,4 +99,27 @@ private void selectData() throws SQLException {
9199
preparedStatement.close();
92100
}
93101
}
102+
103+
// private void selectDefaultData() throws SQLException {
104+
// String sql = "SELECT * FROM `t_config`";
105+
// try (Connection connection = getShardingDataSource().getConnection()) {
106+
// PreparedStatement preparedStatement = connection.prepareStatement(sql);
107+
// preparedStatement.setInt(1, 1);
108+
// preparedStatement.setInt(2, 1);
109+
// preparedStatement.setInt(3, 1);
110+
// ResultSet resultSet = preparedStatement.executeQuery();
111+
// int count = 0;
112+
// while (resultSet.next()) {
113+
// if (0 == count) {
114+
// assertThat(resultSet.getInt(1), is(1));
115+
// assertThat(resultSet.getInt(2), is(5));
116+
// } else if (1 == count) {
117+
// assertThat(resultSet.getInt(1), is(1));
118+
// assertThat(resultSet.getInt(2), is(1));
119+
// }
120+
// count++;
121+
// }
122+
// preparedStatement.close();
123+
// }
124+
// }
94125
}

sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/test/resources/META-INF/rdb/namespace/withNamespaceAlgorithmClass.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
<rdb:strategy id="tableStrategy" sharding-columns="order_id" algorithm-class="com.dangdang.ddframe.rdb.sharding.spring.algorithm.SingleKeyModuloTableShardingAlgorithm"/>
3232

3333
<rdb:data-source id="shardingDataSource">
34-
<rdb:sharding-rule data-sources="dbtbl_0,dbtbl_1">
34+
<rdb:sharding-rule data-sources="dbtbl_0,dbtbl_1" default-data-source="dbtbl_0">
3535
<rdb:table-rules>
3636
<rdb:table-rule logic-table="t_order" actual-tables="t_order_${0..3}" database-strategy="databaseStrategy" table-strategy="tableStrategy"/>
3737
<rdb:table-rule logic-table="t_order_item" actual-tables="t_order_item_${0..3}" database-strategy="databaseStrategy" table-strategy="tableStrategy"/>

sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/test/resources/META-INF/rdb/namespace/withNamespaceAlgorithmClassAndProps.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
<rdb:strategy id="tableStrategy" sharding-columns="order_id" algorithm-class="com.dangdang.ddframe.rdb.sharding.spring.algorithm.SingleKeyModuloTableShardingAlgorithm"/>
3232

3333
<rdb:data-source id="shardingDataSource">
34-
<rdb:sharding-rule data-sources="dbtbl_0,dbtbl_1">
34+
<rdb:sharding-rule data-sources="dbtbl_0,dbtbl_1" default-data-source="dbtbl_0">
3535
<rdb:table-rules>
3636
<rdb:table-rule logic-table="t_order" actual-tables="t_order_${0..3}" database-strategy="databaseStrategy" table-strategy="tableStrategy"/>
3737
<rdb:table-rule logic-table="t_order_item" actual-tables="t_order_item_${0..3}" database-strategy="databaseStrategy" table-strategy="tableStrategy"/>

0 commit comments

Comments
 (0)