Skip to content

Commit

Permalink
Fixed #489.
Browse files Browse the repository at this point in the history
  • Loading branch information
haocao committed Dec 12, 2017
1 parent d6a8560 commit 829bb00
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import io.shardingjdbc.spring.namespace.constants.MasterSlaveDataSourceBeanDefinitionParserTag;
import io.shardingjdbc.spring.namespace.constants.ShardingDataSourceBeanDefinitionParserTag;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.RuntimeBeanReference;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.ManagedMap;
Expand Down Expand Up @@ -52,7 +53,7 @@ protected AbstractBeanDefinition parseInternal(final Element element, final Pars
String masterDataSourceName = parseMasterDataSourceRef(element);
factory.addConstructorArgValue(masterDataSourceName);
factory.addConstructorArgReference(masterDataSourceName);
factory.addConstructorArgValue(parseSlaveDataSources(element, parserContext));
factory.addConstructorArgValue(parseSlaveDataSources(element));
String strategyRef = parseStrategyRef(element);
if (!Strings.isNullOrEmpty(strategyRef)) {
factory.addConstructorArgReference(strategyRef);
Expand All @@ -71,11 +72,11 @@ private String parseMasterDataSourceRef(final Element element) {
return element.getAttribute(MasterSlaveDataSourceBeanDefinitionParserTag.MASTER_DATA_SOURCE_NAME_ATTRIBUTE);
}

private Map<String, BeanDefinition> parseSlaveDataSources(final Element element, final ParserContext parserContext) {
private Map<String, RuntimeBeanReference> parseSlaveDataSources(final Element element) {
List<String> slaveDataSources = Splitter.on(",").trimResults().splitToList(element.getAttribute(MasterSlaveDataSourceBeanDefinitionParserTag.SLAVE_DATA_SOURCE_NAMES_ATTRIBUTE));
Map<String, BeanDefinition> result = new ManagedMap<>(slaveDataSources.size());
Map<String, RuntimeBeanReference> result = new ManagedMap<>(slaveDataSources.size());
for (String each : slaveDataSources) {
result.put(each, parserContext.getRegistry().getBeanDefinition(each));
result.put(each, new RuntimeBeanReference(each));
}
return result;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import io.shardingjdbc.spring.datasource.SpringShardingDataSource;
import io.shardingjdbc.spring.namespace.constants.ShardingDataSourceBeanDefinitionParserTag;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.RuntimeBeanReference;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.ManagedList;
Expand Down Expand Up @@ -51,20 +52,20 @@ public class ShardingDataSourceBeanDefinitionParser extends AbstractBeanDefiniti
protected AbstractBeanDefinition parseInternal(final Element element, final ParserContext parserContext) {
//CHECKSTYLE:ON
BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(SpringShardingDataSource.class);
factory.addConstructorArgValue(parseDataSources(element, parserContext));
factory.addConstructorArgValue(parseDataSources(element));
factory.addConstructorArgValue(parseShardingRuleConfig(element));
factory.addConstructorArgValue(parseConfigMap(element, parserContext, factory.getBeanDefinition()));
factory.addConstructorArgValue(parseProperties(element, parserContext));
factory.setDestroyMethodName("close");
return factory.getBeanDefinition();
}

private Map<String, BeanDefinition> parseDataSources(final Element element, final ParserContext parserContext) {
private Map<String, RuntimeBeanReference> parseDataSources(final Element element) {
Element shardingRuleElement = DomUtils.getChildElementByTagName(element, ShardingDataSourceBeanDefinitionParserTag.SHARDING_RULE_CONFIG_TAG);
List<String> dataSources = Splitter.on(",").trimResults().splitToList(shardingRuleElement.getAttribute(ShardingDataSourceBeanDefinitionParserTag.DATA_SOURCE_NAMES_TAG));
Map<String, BeanDefinition> result = new ManagedMap<>(dataSources.size());
Map<String, RuntimeBeanReference> result = new ManagedMap<>(dataSources.size());
for (String each : dataSources) {
result.put(each, parserContext.getRegistry().getBeanDefinition(each));
result.put(each, new RuntimeBeanReference(each));
}
return result;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
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.config.RuntimeBeanReference;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.ManagedMap;
Expand Down Expand Up @@ -91,12 +92,12 @@ private String parseRegistryCenterRef(final Element element) {
return element.getAttribute("registry-center-ref");
}

private Map<String, BeanDefinition> parseDataSources(final Element element, final ParserContext parserContext) {
private Map<String, RuntimeBeanReference> parseDataSources(final Element element, final ParserContext parserContext) {
String masterDataSource = parseMasterDataSourceRef(element);
Map<String, BeanDefinition> result = new ManagedMap<>();
result.put(masterDataSource, parserContext.getRegistry().getBeanDefinition(masterDataSource));
Map<String, RuntimeBeanReference> result = new ManagedMap<>();
result.put(masterDataSource, new RuntimeBeanReference(masterDataSource));
for (String each : parseSlaveDataSources(element)) {
result.put(each, parserContext.getRegistry().getBeanDefinition(each));
result.put(each, new RuntimeBeanReference(each));
}
return result;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import io.shardingjdbc.orchestration.internal.OrchestrationShardingDataSource;
import io.shardingjdbc.orchestration.spring.namespace.constants.ShardingDataSourceBeanDefinitionParserTag;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.RuntimeBeanReference;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.ManagedList;
Expand Down Expand Up @@ -51,7 +52,7 @@ public class OrchestrationShardingDataSourceBeanDefinitionParser extends Abstrac
protected AbstractBeanDefinition parseInternal(final Element element, final ParserContext parserContext) {
//CHECKSTYLE:ON
BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(OrchestrationShardingDataSource.class);
factory.addConstructorArgValue(parseDataSources(element, parserContext));
factory.addConstructorArgValue(parseDataSources(element));
factory.addConstructorArgValue(parseShardingRuleConfig(element));
factory.addConstructorArgValue(parseConfigMap(element, parserContext, factory.getBeanDefinition()));
factory.addConstructorArgValue(parseProperties(element, parserContext));
Expand All @@ -61,12 +62,12 @@ protected AbstractBeanDefinition parseInternal(final Element element, final Pars
return factory.getBeanDefinition();
}

private Map<String, BeanDefinition> parseDataSources(final Element element, final ParserContext parserContext) {
private Map<String, RuntimeBeanReference> parseDataSources(final Element element) {
Element shardingRuleElement = DomUtils.getChildElementByTagName(element, ShardingDataSourceBeanDefinitionParserTag.SHARDING_RULE_CONFIG_TAG);
List<String> dataSources = Splitter.on(",").trimResults().splitToList(shardingRuleElement.getAttribute(ShardingDataSourceBeanDefinitionParserTag.DATA_SOURCE_NAMES_TAG));
Map<String, BeanDefinition> result = new ManagedMap<>(dataSources.size());
Map<String, RuntimeBeanReference> result = new ManagedMap<>(dataSources.size());
for (String each : dataSources) {
result.put(each, parserContext.getRegistry().getBeanDefinition(each));
result.put(each, new RuntimeBeanReference(each));
}
return result;
}
Expand Down

0 comments on commit 829bb00

Please sign in to comment.