Commit 829bb009 authored by haocao's avatar haocao
Browse files

Fixed #489.

parent d6a85602
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import io.shardingjdbc.spring.datasource.SpringMasterSlaveDataSource;
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;
@@ -52,7 +53,7 @@ public class MasterSlaveDataSourceBeanDefinitionParser extends AbstractBeanDefin
        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);
@@ -71,11 +72,11 @@ public class MasterSlaveDataSourceBeanDefinitionParser extends AbstractBeanDefin
        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;
    }
+5 −4
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import io.shardingjdbc.core.api.config.TableRuleConfiguration;
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;
@@ -51,7 +52,7 @@ 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));
@@ -59,12 +60,12 @@ public class ShardingDataSourceBeanDefinitionParser extends AbstractBeanDefiniti
        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;
    }
+5 −4
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import io.shardingjdbc.orchestration.spring.datasource.SpringMasterSlaveDataSour
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;
@@ -91,12 +92,12 @@ public class OrchestrationMasterSlaveDataSourceBeanDefinitionParser extends Abst
        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;
    }
+5 −4
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import io.shardingjdbc.core.api.config.TableRuleConfiguration;
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;
@@ -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));
@@ -61,12 +62,12 @@ public class OrchestrationShardingDataSourceBeanDefinitionParser extends Abstrac
        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;
    }