From 7895c791ec9c54491425334c1472f46c0cb2f69f Mon Sep 17 00:00:00 2001 From: haocao Date: Mon, 13 Nov 2017 17:16:06 +0800 Subject: [PATCH] Add configuration map support 3th. --- .../OrchestrationSpringBootConfiguration.java | 19 +++++++++++++- ...asterSlaveRuleConfigurationProperties.java | 17 +++++++++++++ ...tionSpringBootConfigurationProperties.java | 17 +++++++++++++ ...otShardingRuleConfigurationProperties.java | 17 +++++++++++++ ...rchestrationSpringBootMasterSlaveTest.java | 23 +++++++++++++++++ .../OrchestrationSpringBootShardingTest.java | 25 ++++++++++++++++++- .../application-masterslave.properties | 2 ++ .../resources/application-sharding.properties | 2 ++ ...hestrationSpringMasterSlaveDataSource.java | 5 ++-- .../SpringMasterSlaveDataSource.java | 7 +++--- ...erSlaveDataSourceBeanDefinitionParser.java | 9 +++++++ .../META-INF/namespace/master-slave.xsd | 11 ++++++++ ...OrchestrationMasterSlaveNamespaceTest.java | 14 +++++++++++ .../META-INF/rdb/masterSlaveNamespace.xml | 6 +++++ ...estrationMasterSlaveDataSourceFactory.java | 19 ++++++++++++++ ...rchestrationShardingDataSourceFactory.java | 1 + .../spring/boot/SpringBootConfiguration.java | 7 ++---- .../type/SpringBootMasterSlaveTest.java | 6 +++++ .../type/SpringBootShardingTest.java | 6 +++++ .../application-masterslave.properties | 2 ++ .../resources/application-sharding.properties | 2 ++ .../SpringMasterSlaveDataSource.java | 14 ++++++----- ...erSlaveDataSourceBeanDefinitionParser.java | 13 ++++++++-- .../META-INF/namespace/master-slave.xsd | 11 ++++++++ .../spring/MasterSlaveNamespaceTest.java | 21 +++++++++++++--- .../META-INF/rdb/masterSlaveNamespace.xml | 6 +++++ 26 files changed, 258 insertions(+), 24 deletions(-) diff --git a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/io/shardingjdbc/orchestration/spring/boot/OrchestrationSpringBootConfiguration.java b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/io/shardingjdbc/orchestration/spring/boot/OrchestrationSpringBootConfiguration.java index 44deeca11f..092223b077 100644 --- a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/io/shardingjdbc/orchestration/spring/boot/OrchestrationSpringBootConfiguration.java +++ b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/io/shardingjdbc/orchestration/spring/boot/OrchestrationSpringBootConfiguration.java @@ -1,3 +1,20 @@ +/* + * Copyright 1999-2015 dangdang.com. + *

+ * 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. + *

+ */ + package io.shardingjdbc.orchestration.spring.boot; import com.google.common.base.Preconditions; @@ -52,7 +69,7 @@ public class OrchestrationSpringBootConfiguration implements EnvironmentAware { ? OrchestrationShardingDataSourceFactory.createDataSource(dataSourceMap, shardingProperties.getShardingRuleConfiguration(), orchestrationProperties.getOrchestrationConfiguration(), shardingProperties.getData(), shardingProperties.getProps()) : OrchestrationMasterSlaveDataSourceFactory.createDataSource(dataSourceMap, - masterSlaveProperties.getMasterSlaveRuleConfiguration(), orchestrationProperties.getOrchestrationConfiguration()); + masterSlaveProperties.getMasterSlaveRuleConfiguration(), orchestrationProperties.getOrchestrationConfiguration(), masterSlaveProperties.getData()); } @Override diff --git a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/io/shardingjdbc/orchestration/spring/boot/masterslave/SpringBootMasterSlaveRuleConfigurationProperties.java b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/io/shardingjdbc/orchestration/spring/boot/masterslave/SpringBootMasterSlaveRuleConfigurationProperties.java index d38c8d5ae0..85f21ef10d 100644 --- a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/io/shardingjdbc/orchestration/spring/boot/masterslave/SpringBootMasterSlaveRuleConfigurationProperties.java +++ b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/io/shardingjdbc/orchestration/spring/boot/masterslave/SpringBootMasterSlaveRuleConfigurationProperties.java @@ -1,3 +1,20 @@ +/* + * Copyright 1999-2015 dangdang.com. + *

+ * 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. + *

+ */ + package io.shardingjdbc.orchestration.spring.boot.masterslave; import io.shardingjdbc.core.yaml.masterslave.YamlMasterSlaveRuleConfiguration; diff --git a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/io/shardingjdbc/orchestration/spring/boot/orchestration/OrchestrationSpringBootConfigurationProperties.java b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/io/shardingjdbc/orchestration/spring/boot/orchestration/OrchestrationSpringBootConfigurationProperties.java index a7ecd30592..2302627390 100644 --- a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/io/shardingjdbc/orchestration/spring/boot/orchestration/OrchestrationSpringBootConfigurationProperties.java +++ b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/io/shardingjdbc/orchestration/spring/boot/orchestration/OrchestrationSpringBootConfigurationProperties.java @@ -1,3 +1,20 @@ +/* + * Copyright 1999-2015 dangdang.com. + *

+ * 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. + *

+ */ + package io.shardingjdbc.orchestration.spring.boot.orchestration; import io.shardingjdbc.orchestration.yaml.YamlOrchestrationConfiguration; diff --git a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/io/shardingjdbc/orchestration/spring/boot/sharding/SpringBootShardingRuleConfigurationProperties.java b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/io/shardingjdbc/orchestration/spring/boot/sharding/SpringBootShardingRuleConfigurationProperties.java index 153108eab2..b1c7c7d784 100644 --- a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/io/shardingjdbc/orchestration/spring/boot/sharding/SpringBootShardingRuleConfigurationProperties.java +++ b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/io/shardingjdbc/orchestration/spring/boot/sharding/SpringBootShardingRuleConfigurationProperties.java @@ -1,3 +1,20 @@ +/* + * Copyright 1999-2015 dangdang.com. + *

+ * 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. + *

+ */ + package io.shardingjdbc.orchestration.spring.boot.sharding; import io.shardingjdbc.core.yaml.sharding.YamlShardingRuleConfiguration; diff --git a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/io.shardingjdbc.spring.boot/type/OrchestrationSpringBootMasterSlaveTest.java b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/io.shardingjdbc.spring.boot/type/OrchestrationSpringBootMasterSlaveTest.java index c11d341882..569128a4db 100644 --- a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/io.shardingjdbc.spring.boot/type/OrchestrationSpringBootMasterSlaveTest.java +++ b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/io.shardingjdbc.spring.boot/type/OrchestrationSpringBootMasterSlaveTest.java @@ -1,5 +1,23 @@ +/* + * Copyright 1999-2015 dangdang.com. + *

+ * 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. + *

+ */ + package io.shardingjdbc.spring.boot.type; +import io.shardingjdbc.core.api.ConfigMapContext; import io.shardingjdbc.core.jdbc.core.datasource.MasterSlaveDataSource; import io.shardingjdbc.spring.boot.util.EmbedTestingServer; import org.apache.commons.dbcp.BasicDataSource; @@ -13,6 +31,8 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import javax.annotation.Resource; import javax.sql.DataSource; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertThat; @@ -38,5 +58,8 @@ public class OrchestrationSpringBootMasterSlaveTest { for (DataSource each : ((MasterSlaveDataSource) dataSource).getAllDataSources().values()) { assertThat(((BasicDataSource) each).getMaxActive(), is(16)); } + Map configMap = new ConcurrentHashMap<>(); + configMap.put("key1", "value1"); + assertThat(ConfigMapContext.getInstance().getConfigMap(), is(configMap)); } } diff --git a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/io.shardingjdbc.spring.boot/type/OrchestrationSpringBootShardingTest.java b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/io.shardingjdbc.spring.boot/type/OrchestrationSpringBootShardingTest.java index 4ef149a6d1..40c405d6d5 100644 --- a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/io.shardingjdbc.spring.boot/type/OrchestrationSpringBootShardingTest.java +++ b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/io.shardingjdbc.spring.boot/type/OrchestrationSpringBootShardingTest.java @@ -1,5 +1,23 @@ +/* + * Copyright 1999-2015 dangdang.com. + *

+ * 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. + *

+ */ + package io.shardingjdbc.spring.boot.type; +import io.shardingjdbc.core.api.ConfigMapContext; import io.shardingjdbc.core.jdbc.core.ShardingContext; import io.shardingjdbc.core.jdbc.core.datasource.ShardingDataSource; import io.shardingjdbc.spring.boot.util.EmbedTestingServer; @@ -15,6 +33,8 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import javax.annotation.Resource; import javax.sql.DataSource; import java.lang.reflect.Field; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertThat; @@ -43,6 +63,9 @@ public class OrchestrationSpringBootShardingTest { for (DataSource each : shardingContext.getShardingRule().getDataSourceMap().values()) { assertThat(((BasicDataSource) each).getMaxActive(), is(16)); } - //assertTrue(shardingContext.isShowSQL()); + assertTrue(shardingContext.isShowSQL()); + Map configMap = new ConcurrentHashMap<>(); + configMap.put("key1", "value1"); + assertThat(ConfigMapContext.getInstance().getConfigMap(), is(configMap)); } } diff --git a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/resources/application-masterslave.properties b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/resources/application-masterslave.properties index 5f75bb4f78..4efd4db4ef 100644 --- a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/resources/application-masterslave.properties +++ b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/resources/application-masterslave.properties @@ -29,3 +29,5 @@ sharding.jdbc.config.orchestration.name=demo_spring_boot_ds_ms sharding.jdbc.config.orchestration.overwrite=true sharding.jdbc.config.orchestration.registryCenter.namespace=orchestration-spring-boot-master-slave-test sharding.jdbc.config.orchestration.registryCenter.server-lists=localhost:3181 + +sharding.jdbc.config.masterslave.data.key1=value1 diff --git a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/resources/application-sharding.properties b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/resources/application-sharding.properties index 0389a3c7c6..e18f71927f 100644 --- a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/resources/application-sharding.properties +++ b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/resources/application-sharding.properties @@ -39,3 +39,5 @@ sharding.jdbc.config.orchestration.name=demo_spring_boot_ds_sharding sharding.jdbc.config.orchestration.overwrite=true sharding.jdbc.config.orchestration.registryCenter.namespace=orchestration-spring-boot-sharding-test sharding.jdbc.config.orchestration.registryCenter.server-lists=localhost:3181 + +sharding.jdbc.config.masterslave.data.key1=value1 diff --git a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/io/shardingjdbc/orchestration/spring/datasource/OrchestrationSpringMasterSlaveDataSource.java b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/io/shardingjdbc/orchestration/spring/datasource/OrchestrationSpringMasterSlaveDataSource.java index e8215b001c..9739812e61 100644 --- a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/io/shardingjdbc/orchestration/spring/datasource/OrchestrationSpringMasterSlaveDataSource.java +++ b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/io/shardingjdbc/orchestration/spring/datasource/OrchestrationSpringMasterSlaveDataSource.java @@ -41,8 +41,9 @@ public class OrchestrationSpringMasterSlaveDataSource extends MasterSlaveDataSou private final MasterSlaveRuleConfiguration masterSlaveRuleConfig; public OrchestrationSpringMasterSlaveDataSource(final String name, final boolean overwrite, final CoordinatorRegistryCenter registryCenter, - final Map dataSourceMap, final MasterSlaveRuleConfiguration masterSlaveRuleConfig) throws SQLException { - super(masterSlaveRuleConfig.build(dataSourceMap)); + final Map dataSourceMap, final MasterSlaveRuleConfiguration masterSlaveRuleConfig, + final Map configMap) throws SQLException { + super(masterSlaveRuleConfig.build(dataSourceMap), configMap); this.dataSourceMap = dataSourceMap; this.masterSlaveRuleConfig = masterSlaveRuleConfig; config = new OrchestrationConfiguration(name, registryCenter, overwrite); diff --git a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/io/shardingjdbc/orchestration/spring/datasource/SpringMasterSlaveDataSource.java b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/io/shardingjdbc/orchestration/spring/datasource/SpringMasterSlaveDataSource.java index deb0929673..010815071d 100644 --- a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/io/shardingjdbc/orchestration/spring/datasource/SpringMasterSlaveDataSource.java +++ b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/io/shardingjdbc/orchestration/spring/datasource/SpringMasterSlaveDataSource.java @@ -24,6 +24,7 @@ import io.shardingjdbc.core.rule.MasterSlaveRule; import javax.sql.DataSource; import java.sql.SQLException; +import java.util.Collections; import java.util.Map; /** @@ -35,16 +36,16 @@ public class SpringMasterSlaveDataSource extends MasterSlaveDataSource { public SpringMasterSlaveDataSource(final String name, final String masterDataSourceName, final DataSource masterDataSource, final Map slaveDataSourceMap) throws SQLException { - super(new MasterSlaveRule(name, masterDataSourceName, masterDataSource, slaveDataSourceMap)); + super(new MasterSlaveRule(name, masterDataSourceName, masterDataSource, slaveDataSourceMap), Collections.emptyMap()); } public SpringMasterSlaveDataSource(final String name, final String masterDataSourceName, final DataSource masterDataSource, final Map slaveDataSourceMap, final MasterSlaveLoadBalanceAlgorithm strategy) throws SQLException { - super(new MasterSlaveRule(name, masterDataSourceName, masterDataSource, slaveDataSourceMap, strategy)); + super(new MasterSlaveRule(name, masterDataSourceName, masterDataSource, slaveDataSourceMap, strategy), Collections.emptyMap()); } public SpringMasterSlaveDataSource(final String name, final String masterDataSourceName, final DataSource masterDataSource, final Map slaveDataSourceMap, final MasterSlaveLoadBalanceAlgorithmType strategyType) throws SQLException { - super(new MasterSlaveRule(name, masterDataSourceName, masterDataSource, slaveDataSourceMap, strategyType.getAlgorithm())); + super(new MasterSlaveRule(name, masterDataSourceName, masterDataSource, slaveDataSourceMap, strategyType.getAlgorithm()), Collections.emptyMap()); } } diff --git a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/io/shardingjdbc/orchestration/spring/namespace/parser/OrchestrationMasterSlaveDataSourceBeanDefinitionParser.java b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/io/shardingjdbc/orchestration/spring/namespace/parser/OrchestrationMasterSlaveDataSourceBeanDefinitionParser.java index 6dda07f338..8476a263c2 100644 --- a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/io/shardingjdbc/orchestration/spring/namespace/parser/OrchestrationMasterSlaveDataSourceBeanDefinitionParser.java +++ b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/io/shardingjdbc/orchestration/spring/namespace/parser/OrchestrationMasterSlaveDataSourceBeanDefinitionParser.java @@ -24,14 +24,17 @@ import io.shardingjdbc.core.api.config.MasterSlaveRuleConfiguration; import io.shardingjdbc.orchestration.spring.datasource.OrchestrationSpringMasterSlaveDataSource; import io.shardingjdbc.orchestration.spring.datasource.SpringMasterSlaveDataSource; import io.shardingjdbc.orchestration.spring.namespace.constants.MasterSlaveDataSourceBeanDefinitionParserTag; +import io.shardingjdbc.orchestration.spring.namespace.constants.ShardingDataSourceBeanDefinitionParserTag; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.ManagedMap; import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; +import org.springframework.util.xml.DomUtils; import org.w3c.dom.Element; +import java.util.Collections; import java.util.List; import java.util.Map; @@ -66,6 +69,7 @@ public class OrchestrationMasterSlaveDataSourceBeanDefinitionParser extends Abst } else { factory.addConstructorArgValue(parseStrategyType(element)); } + factory.addConstructorArgValue(parseConfigMap(element, parserContext, factory.getBeanDefinition())); return factory.getBeanDefinition(); } @@ -141,4 +145,9 @@ public class OrchestrationMasterSlaveDataSourceBeanDefinitionParser extends Abst String result = element.getAttribute(MasterSlaveDataSourceBeanDefinitionParserTag.STRATEGY_TYPE_ATTRIBUTE); return Strings.isNullOrEmpty(result) ? MasterSlaveLoadBalanceAlgorithmType.getDefaultAlgorithmType() : MasterSlaveLoadBalanceAlgorithmType.valueOf(result); } + + private Map parseConfigMap(final Element element, final ParserContext parserContext, final BeanDefinition beanDefinition) { + Element dataElement = DomUtils.getChildElementByTagName(element, ShardingDataSourceBeanDefinitionParserTag.DATA_TAG); + return null == dataElement ? Collections.>emptyMap() : parserContext.getDelegate().parseMapElement(dataElement, beanDefinition); + } } diff --git a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/resources/META-INF/namespace/master-slave.xsd b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/resources/META-INF/namespace/master-slave.xsd index 0a2da3b430..77bb598c7e 100644 --- a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/resources/META-INF/namespace/master-slave.xsd +++ b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/resources/META-INF/namespace/master-slave.xsd @@ -1,12 +1,16 @@ + + + @@ -15,4 +19,11 @@ + + + + + + + diff --git a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/java/io/shardingjdbc/orchestration/spring/OrchestrationMasterSlaveNamespaceTest.java b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/java/io/shardingjdbc/orchestration/spring/OrchestrationMasterSlaveNamespaceTest.java index 242aafa58b..bbe460d02a 100644 --- a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/java/io/shardingjdbc/orchestration/spring/OrchestrationMasterSlaveNamespaceTest.java +++ b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/java/io/shardingjdbc/orchestration/spring/OrchestrationMasterSlaveNamespaceTest.java @@ -17,6 +17,7 @@ package io.shardingjdbc.orchestration.spring; +import io.shardingjdbc.core.api.ConfigMapContext; import io.shardingjdbc.core.api.algorithm.masterslave.MasterSlaveLoadBalanceAlgorithm; import io.shardingjdbc.core.api.algorithm.masterslave.RandomMasterSlaveLoadBalanceAlgorithm; import io.shardingjdbc.core.api.algorithm.masterslave.RoundRobinMasterSlaveLoadBalanceAlgorithm; @@ -31,6 +32,10 @@ import org.junit.Test; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; +import java.util.HashMap; +import java.util.Map; + +import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; @@ -76,4 +81,13 @@ public class OrchestrationMasterSlaveNamespaceTest extends AbstractJUnit4SpringC MasterSlaveDataSource masterSlaveDataSource = this.applicationContext.getBean(masterSlaveDataSourceName, MasterSlaveDataSource.class); return (MasterSlaveRule) FieldValueUtil.getFieldValue(masterSlaveDataSource, "masterSlaveRule", true); } + + @Test + public void assertConfigMapDataSource() { + Object masterSlaveDataSource = this.applicationContext.getBean("configMapDataSource"); + Map configMap = new HashMap<>(); + configMap.put("key1", "value1"); + assertThat(ConfigMapContext.getInstance().getConfigMap(), is(configMap)); + assertThat(masterSlaveDataSource, instanceOf(MasterSlaveDataSource.class)); + } } diff --git a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/resources/META-INF/rdb/masterSlaveNamespace.xml b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/resources/META-INF/rdb/masterSlaveNamespace.xml index 4168781d99..ad485f0fe6 100644 --- a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/resources/META-INF/rdb/masterSlaveNamespace.xml +++ b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/resources/META-INF/rdb/masterSlaveNamespace.xml @@ -19,4 +19,10 @@ + + + + + + diff --git a/sharding-jdbc-orchestration/src/main/java/io/shardingjdbc/orchestration/api/OrchestrationMasterSlaveDataSourceFactory.java b/sharding-jdbc-orchestration/src/main/java/io/shardingjdbc/orchestration/api/OrchestrationMasterSlaveDataSourceFactory.java index 7299e1fb16..a99041e38f 100644 --- a/sharding-jdbc-orchestration/src/main/java/io/shardingjdbc/orchestration/api/OrchestrationMasterSlaveDataSourceFactory.java +++ b/sharding-jdbc-orchestration/src/main/java/io/shardingjdbc/orchestration/api/OrchestrationMasterSlaveDataSourceFactory.java @@ -63,6 +63,25 @@ public final class OrchestrationMasterSlaveDataSourceFactory { return result; } + /** + * Create master-slave data source. + * + * @param dataSourceMap data source map + * @param masterSlaveRuleConfig master-slave rule configuration + * @param orchestrationConfig orchestration master-slave configuration + * @param configMap config map + * + * @return sharding data source + * @throws SQLException SQL exception + */ + public static DataSource createDataSource( + final Map dataSourceMap, final MasterSlaveRuleConfiguration masterSlaveRuleConfig, + final OrchestrationConfiguration orchestrationConfig, final Map configMap) throws SQLException { + MasterSlaveDataSource result = (MasterSlaveDataSource) MasterSlaveDataSourceFactory.createDataSource(dataSourceMap, masterSlaveRuleConfig, configMap); + new OrchestrationFacade(orchestrationConfig).initMasterSlaveOrchestration(dataSourceMap, masterSlaveRuleConfig, result); + return result; + } + /** * Create master-slave data source. * diff --git a/sharding-jdbc-orchestration/src/main/java/io/shardingjdbc/orchestration/api/OrchestrationShardingDataSourceFactory.java b/sharding-jdbc-orchestration/src/main/java/io/shardingjdbc/orchestration/api/OrchestrationShardingDataSourceFactory.java index 5d1048c179..9b0214f840 100644 --- a/sharding-jdbc-orchestration/src/main/java/io/shardingjdbc/orchestration/api/OrchestrationShardingDataSourceFactory.java +++ b/sharding-jdbc-orchestration/src/main/java/io/shardingjdbc/orchestration/api/OrchestrationShardingDataSourceFactory.java @@ -54,6 +54,7 @@ public final class OrchestrationShardingDataSourceFactory { * @param dataSourceMap data source map * @param shardingRuleConfig sharding rule configuration * @param orchestrationConfig orchestration master-slave configuration + * @param configMap config map * @param props properties for data source * * @return sharding data source diff --git a/sharding-jdbc-spring/sharding-jdbc-spring-boot-starter/src/main/java/io/shardingjdbc/spring/boot/SpringBootConfiguration.java b/sharding-jdbc-spring/sharding-jdbc-spring-boot-starter/src/main/java/io/shardingjdbc/spring/boot/SpringBootConfiguration.java index 152583a4ca..80ab506673 100644 --- a/sharding-jdbc-spring/sharding-jdbc-spring-boot-starter/src/main/java/io/shardingjdbc/spring/boot/SpringBootConfiguration.java +++ b/sharding-jdbc-spring/sharding-jdbc-spring-boot-starter/src/main/java/io/shardingjdbc/spring/boot/SpringBootConfiguration.java @@ -22,7 +22,6 @@ import java.sql.SQLException; import java.util.HashMap; import java.util.Map; import java.util.Properties; -import java.util.concurrent.ConcurrentHashMap; /** * Spring boot sharding and master-slave configuration. @@ -41,15 +40,13 @@ public class SpringBootConfiguration implements EnvironmentAware { private final Map dataSourceMap = new HashMap<>(); - private final Map configMap = new ConcurrentHashMap<>(); - private final Properties props = new Properties(); @Bean public DataSource dataSource() throws SQLException { return null == masterSlaveProperties.getMasterDataSourceName() - ? ShardingDataSourceFactory.createDataSource(dataSourceMap, shardingProperties.getShardingRuleConfiguration(), configMap, shardingProperties.getProps()) - : MasterSlaveDataSourceFactory.createDataSource(dataSourceMap, masterSlaveProperties.getMasterSlaveRuleConfiguration()); + ? ShardingDataSourceFactory.createDataSource(dataSourceMap, shardingProperties.getShardingRuleConfiguration(), shardingProperties.getData(), props) + : MasterSlaveDataSourceFactory.createDataSource(dataSourceMap, masterSlaveProperties.getMasterSlaveRuleConfiguration(), masterSlaveProperties.getData()); } @Override diff --git a/sharding-jdbc-spring/sharding-jdbc-spring-boot-starter/src/test/java/io.shardingjdbc.spring.boot/type/SpringBootMasterSlaveTest.java b/sharding-jdbc-spring/sharding-jdbc-spring-boot-starter/src/test/java/io.shardingjdbc.spring.boot/type/SpringBootMasterSlaveTest.java index 7edcc20a34..df10254ba7 100644 --- a/sharding-jdbc-spring/sharding-jdbc-spring-boot-starter/src/test/java/io.shardingjdbc.spring.boot/type/SpringBootMasterSlaveTest.java +++ b/sharding-jdbc-spring/sharding-jdbc-spring-boot-starter/src/test/java/io.shardingjdbc.spring.boot/type/SpringBootMasterSlaveTest.java @@ -1,5 +1,6 @@ package io.shardingjdbc.spring.boot.type; +import io.shardingjdbc.core.api.ConfigMapContext; import io.shardingjdbc.core.jdbc.core.datasource.MasterSlaveDataSource; import org.apache.commons.dbcp.BasicDataSource; import org.junit.Test; @@ -11,6 +12,8 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import javax.annotation.Resource; import javax.sql.DataSource; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertThat; @@ -31,5 +34,8 @@ public class SpringBootMasterSlaveTest { for (DataSource each : ((MasterSlaveDataSource) dataSource).getAllDataSources().values()) { assertThat(((BasicDataSource) each).getMaxActive(), is(16)); } + Map configMap = new ConcurrentHashMap<>(); + configMap.put("key1", "value1"); + assertThat(ConfigMapContext.getInstance().getConfigMap(), is(configMap)); } } diff --git a/sharding-jdbc-spring/sharding-jdbc-spring-boot-starter/src/test/java/io.shardingjdbc.spring.boot/type/SpringBootShardingTest.java b/sharding-jdbc-spring/sharding-jdbc-spring-boot-starter/src/test/java/io.shardingjdbc.spring.boot/type/SpringBootShardingTest.java index 71eae5319b..d33991001d 100644 --- a/sharding-jdbc-spring/sharding-jdbc-spring-boot-starter/src/test/java/io.shardingjdbc.spring.boot/type/SpringBootShardingTest.java +++ b/sharding-jdbc-spring/sharding-jdbc-spring-boot-starter/src/test/java/io.shardingjdbc.spring.boot/type/SpringBootShardingTest.java @@ -1,5 +1,6 @@ package io.shardingjdbc.spring.boot.type; +import io.shardingjdbc.core.api.ConfigMapContext; import io.shardingjdbc.core.jdbc.core.ShardingContext; import io.shardingjdbc.core.jdbc.core.datasource.ShardingDataSource; import org.apache.commons.dbcp.BasicDataSource; @@ -13,6 +14,8 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import javax.annotation.Resource; import javax.sql.DataSource; import java.lang.reflect.Field; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertThat; @@ -37,5 +40,8 @@ public class SpringBootShardingTest { assertThat(((BasicDataSource) each).getMaxActive(), is(16)); } assertTrue(shardingContext.isShowSQL()); + Map configMap = new ConcurrentHashMap<>(); + configMap.put("key1", "value1"); + assertThat(ConfigMapContext.getInstance().getConfigMap(), is(configMap)); } } diff --git a/sharding-jdbc-spring/sharding-jdbc-spring-boot-starter/src/test/resources/application-masterslave.properties b/sharding-jdbc-spring/sharding-jdbc-spring-boot-starter/src/test/resources/application-masterslave.properties index 45a4bcba07..578edd7dc8 100644 --- a/sharding-jdbc-spring/sharding-jdbc-spring-boot-starter/src/test/resources/application-masterslave.properties +++ b/sharding-jdbc-spring/sharding-jdbc-spring-boot-starter/src/test/resources/application-masterslave.properties @@ -24,3 +24,5 @@ sharding.jdbc.datasource.ds_slave_1.maxActive=16 sharding.jdbc.config.masterslave.name=ds_ms sharding.jdbc.config.masterslave.masterDataSourceName=ds_master sharding.jdbc.config.masterslave.slaveDataSourceNames=ds_slave_0,ds_slave_1 + +sharding.jdbc.config.masterslave.data.key1=value1 diff --git a/sharding-jdbc-spring/sharding-jdbc-spring-boot-starter/src/test/resources/application-sharding.properties b/sharding-jdbc-spring/sharding-jdbc-spring-boot-starter/src/test/resources/application-sharding.properties index bd9021f103..11f3357c86 100644 --- a/sharding-jdbc-spring/sharding-jdbc-spring-boot-starter/src/test/resources/application-sharding.properties +++ b/sharding-jdbc-spring/sharding-jdbc-spring-boot-starter/src/test/resources/application-sharding.properties @@ -34,3 +34,5 @@ sharding.jdbc.config.sharding.tables.t_order_item.keyGeneratorColumnName=order_i sharding.jdbc.config.sharding.props.sql.show=true sharding.jdbc.config.sharding.props.executor.size=100 + +sharding.jdbc.config.sharding.data.key1=value1 diff --git a/sharding-jdbc-spring/sharding-jdbc-spring-namespace/src/main/java/io/shardingjdbc/spring/datasource/SpringMasterSlaveDataSource.java b/sharding-jdbc-spring/sharding-jdbc-spring-namespace/src/main/java/io/shardingjdbc/spring/datasource/SpringMasterSlaveDataSource.java index d0d0781d1e..c2a5ae889d 100644 --- a/sharding-jdbc-spring/sharding-jdbc-spring-namespace/src/main/java/io/shardingjdbc/spring/datasource/SpringMasterSlaveDataSource.java +++ b/sharding-jdbc-spring/sharding-jdbc-spring-namespace/src/main/java/io/shardingjdbc/spring/datasource/SpringMasterSlaveDataSource.java @@ -34,17 +34,19 @@ import java.util.Map; public class SpringMasterSlaveDataSource extends MasterSlaveDataSource { public SpringMasterSlaveDataSource(final String name, final String masterDataSourceName, - final DataSource masterDataSource, final Map slaveDataSourceMap) throws SQLException { - super(new MasterSlaveRule(name, masterDataSourceName, masterDataSource, slaveDataSourceMap)); + final DataSource masterDataSource, final Map slaveDataSourceMap, final Map configMap) throws SQLException { + super(new MasterSlaveRule(name, masterDataSourceName, masterDataSource, slaveDataSourceMap), configMap); } public SpringMasterSlaveDataSource(final String name, final String masterDataSourceName, - final DataSource masterDataSource, final Map slaveDataSourceMap, final MasterSlaveLoadBalanceAlgorithm strategy) throws SQLException { - super(new MasterSlaveRule(name, masterDataSourceName, masterDataSource, slaveDataSourceMap, strategy)); + final DataSource masterDataSource, final Map slaveDataSourceMap, + final MasterSlaveLoadBalanceAlgorithm strategy, final Map configMap) throws SQLException { + super(new MasterSlaveRule(name, masterDataSourceName, masterDataSource, slaveDataSourceMap, strategy), configMap); } public SpringMasterSlaveDataSource(final String name, final String masterDataSourceName, final DataSource masterDataSource, - final Map slaveDataSourceMap, final MasterSlaveLoadBalanceAlgorithmType strategyType) throws SQLException { - super(new MasterSlaveRule(name, masterDataSourceName, masterDataSource, slaveDataSourceMap, strategyType.getAlgorithm())); + final Map slaveDataSourceMap, final MasterSlaveLoadBalanceAlgorithmType strategyType, + final Map configMap) throws SQLException { + super(new MasterSlaveRule(name, masterDataSourceName, masterDataSource, slaveDataSourceMap, strategyType.getAlgorithm()), configMap); } } diff --git a/sharding-jdbc-spring/sharding-jdbc-spring-namespace/src/main/java/io/shardingjdbc/spring/namespace/parser/MasterSlaveDataSourceBeanDefinitionParser.java b/sharding-jdbc-spring/sharding-jdbc-spring-namespace/src/main/java/io/shardingjdbc/spring/namespace/parser/MasterSlaveDataSourceBeanDefinitionParser.java index 4a0c2bc258..d2f43326cd 100644 --- a/sharding-jdbc-spring/sharding-jdbc-spring-namespace/src/main/java/io/shardingjdbc/spring/namespace/parser/MasterSlaveDataSourceBeanDefinitionParser.java +++ b/sharding-jdbc-spring/sharding-jdbc-spring-namespace/src/main/java/io/shardingjdbc/spring/namespace/parser/MasterSlaveDataSourceBeanDefinitionParser.java @@ -17,19 +17,22 @@ package io.shardingjdbc.spring.namespace.parser; +import com.google.common.base.Splitter; +import com.google.common.base.Strings; import io.shardingjdbc.core.api.algorithm.masterslave.MasterSlaveLoadBalanceAlgorithmType; import io.shardingjdbc.spring.datasource.SpringMasterSlaveDataSource; import io.shardingjdbc.spring.namespace.constants.MasterSlaveDataSourceBeanDefinitionParserTag; -import com.google.common.base.Splitter; -import com.google.common.base.Strings; +import io.shardingjdbc.spring.namespace.constants.ShardingDataSourceBeanDefinitionParserTag; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.ManagedMap; import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; +import org.springframework.util.xml.DomUtils; import org.w3c.dom.Element; +import java.util.Collections; import java.util.List; import java.util.Map; @@ -56,6 +59,7 @@ public class MasterSlaveDataSourceBeanDefinitionParser extends AbstractBeanDefin } else { factory.addConstructorArgValue(parseStrategyType(element)); } + factory.addConstructorArgValue(parseConfigMap(element, parserContext, factory.getBeanDefinition())); return factory.getBeanDefinition(); } @@ -84,4 +88,9 @@ public class MasterSlaveDataSourceBeanDefinitionParser extends AbstractBeanDefin String result = element.getAttribute(MasterSlaveDataSourceBeanDefinitionParserTag.STRATEGY_TYPE_ATTRIBUTE); return Strings.isNullOrEmpty(result) ? MasterSlaveLoadBalanceAlgorithmType.getDefaultAlgorithmType() : MasterSlaveLoadBalanceAlgorithmType.valueOf(result); } + + private Map parseConfigMap(final Element element, final ParserContext parserContext, final BeanDefinition beanDefinition) { + Element dataElement = DomUtils.getChildElementByTagName(element, ShardingDataSourceBeanDefinitionParserTag.DATA_TAG); + return null == dataElement ? Collections.>emptyMap() : parserContext.getDelegate().parseMapElement(dataElement, beanDefinition); + } } diff --git a/sharding-jdbc-spring/sharding-jdbc-spring-namespace/src/main/resources/META-INF/namespace/master-slave.xsd b/sharding-jdbc-spring/sharding-jdbc-spring-namespace/src/main/resources/META-INF/namespace/master-slave.xsd index 9c9cad3c9d..6426e79613 100644 --- a/sharding-jdbc-spring/sharding-jdbc-spring-namespace/src/main/resources/META-INF/namespace/master-slave.xsd +++ b/sharding-jdbc-spring/sharding-jdbc-spring-namespace/src/main/resources/META-INF/namespace/master-slave.xsd @@ -1,12 +1,16 @@ + + + @@ -14,4 +18,11 @@ + + + + + + + diff --git a/sharding-jdbc-spring/sharding-jdbc-spring-namespace/src/test/java/io/shardingjdbc/spring/MasterSlaveNamespaceTest.java b/sharding-jdbc-spring/sharding-jdbc-spring-namespace/src/test/java/io/shardingjdbc/spring/MasterSlaveNamespaceTest.java index 532ad26476..3a862ee3d0 100644 --- a/sharding-jdbc-spring/sharding-jdbc-spring-namespace/src/test/java/io/shardingjdbc/spring/MasterSlaveNamespaceTest.java +++ b/sharding-jdbc-spring/sharding-jdbc-spring-namespace/src/test/java/io/shardingjdbc/spring/MasterSlaveNamespaceTest.java @@ -17,10 +17,7 @@ package io.shardingjdbc.spring; -import org.junit.Test; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; - +import io.shardingjdbc.core.api.ConfigMapContext; import io.shardingjdbc.core.api.algorithm.masterslave.MasterSlaveLoadBalanceAlgorithm; import io.shardingjdbc.core.api.algorithm.masterslave.RandomMasterSlaveLoadBalanceAlgorithm; import io.shardingjdbc.core.api.algorithm.masterslave.RoundRobinMasterSlaveLoadBalanceAlgorithm; @@ -30,7 +27,14 @@ import io.shardingjdbc.core.rule.MasterSlaveRule; import io.shardingjdbc.core.rule.ShardingRule; import io.shardingjdbc.spring.datasource.SpringMasterSlaveDataSource; import io.shardingjdbc.spring.util.FieldValueUtil; +import org.junit.Test; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; + +import java.util.HashMap; +import java.util.Map; +import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; @@ -87,4 +91,13 @@ public class MasterSlaveNamespaceTest extends AbstractJUnit4SpringContextTests { MasterSlaveDataSource masterSlaveDataSource = this.applicationContext.getBean(masterSlaveDataSourceName, MasterSlaveDataSource.class); return (MasterSlaveRule) FieldValueUtil.getFieldValue(masterSlaveDataSource, "masterSlaveRule", true); } + + @Test + public void assertConfigMapDataSource() { + Object masterSlaveDataSource = this.applicationContext.getBean("configMapDataSource"); + Map configMap = new HashMap<>(); + configMap.put("key1", "value1"); + assertThat(ConfigMapContext.getInstance().getConfigMap(), is(configMap)); + assertThat(masterSlaveDataSource, instanceOf(MasterSlaveDataSource.class)); + } } diff --git a/sharding-jdbc-spring/sharding-jdbc-spring-namespace/src/test/resources/META-INF/rdb/masterSlaveNamespace.xml b/sharding-jdbc-spring/sharding-jdbc-spring-namespace/src/test/resources/META-INF/rdb/masterSlaveNamespace.xml index eb1cdd3e82..1f995e0b31 100644 --- a/sharding-jdbc-spring/sharding-jdbc-spring-namespace/src/test/resources/META-INF/rdb/masterSlaveNamespace.xml +++ b/sharding-jdbc-spring/sharding-jdbc-spring-namespace/src/test/resources/META-INF/rdb/masterSlaveNamespace.xml @@ -22,6 +22,12 @@ + + + + + + -- GitLab