提交 829bb009 编写于 作者: H haocao

Fixed #489.

上级 d6a85602
......@@ -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;
}
......
......@@ -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;
}
......
......@@ -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;
}
......
......@@ -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;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册