/** * Get slave data source names. * * @return available slave data source names */ @Override public Collection<String> getSlaveDataSourceNames() { if (disabledDataSourceNames.isEmpty()) { return super.getSlaveDataSourceNames(); } Collection<String> result = new LinkedList<>(super.getSlaveDataSourceNames()); result.removeAll(disabledDataSourceNames); return result; }
private void reviseMasterSlaveMetaData(final Map<String, DataSourceMetaData> dataSourceMetaDataMap, final DataSourceMetaData masterSlaveDataSourceMetaData, final MasterSlaveRule masterSlaveRule) { dataSourceMetaDataMap.put(masterSlaveRule.getName(), masterSlaveDataSourceMetaData); dataSourceMetaDataMap.remove(masterSlaveRule.getMasterDataSourceName()); for (String each : masterSlaveRule.getSlaveDataSourceNames()) { dataSourceMetaDataMap.remove(each); } }
private Map<String, RuleConfiguration> getRuleConfigurationMap() { MasterSlaveRule masterSlaveRule = dataSource.getMasterSlaveRule(); Map<String, RuleConfiguration> result = new HashMap<>(); result.put(ShardingConstant.LOGIC_SCHEMA_NAME, new MasterSlaveRuleConfiguration( masterSlaveRule.getName(), masterSlaveRule.getMasterDataSourceName(), masterSlaveRule.getSlaveDataSourceNames(), masterSlaveRule.getLoadBalanceAlgorithm())); return result; }
private Collection<String> route(final SQLType sqlType) { if (isMasterRoute(sqlType)) { MasterVisitedManager.setMasterVisited(); return Collections.singletonList(masterSlaveRule.getMasterDataSourceName()); } return Collections.singletonList(masterSlaveRule.getLoadBalanceAlgorithm().getDataSource( masterSlaveRule.getName(), masterSlaveRule.getMasterDataSourceName(), new ArrayList<>(masterSlaveRule.getSlaveDataSourceNames()))); }
private void route(final MasterSlaveRule masterSlaveRule, final SQLRouteResult sqlRouteResult) { Collection<RouteUnit> toBeRemoved = new LinkedList<>(); Collection<RouteUnit> toBeAdded = new LinkedList<>(); for (RouteUnit each : sqlRouteResult.getRouteUnits()) { if (!masterSlaveRule.getName().equalsIgnoreCase(each.getDataSourceName())) { continue; } toBeRemoved.add(each); if (isMasterRoute(sqlRouteResult.getSqlStatement().getType())) { MasterVisitedManager.setMasterVisited(); toBeAdded.add(new RouteUnit(masterSlaveRule.getMasterDataSourceName(), each.getSqlUnit())); } else { toBeAdded.add(new RouteUnit(masterSlaveRule.getLoadBalanceAlgorithm().getDataSource( masterSlaveRule.getName(), masterSlaveRule.getMasterDataSourceName(), new ArrayList<>(masterSlaveRule.getSlaveDataSourceNames())), each.getSqlUnit())); } } sqlRouteResult.getRouteUnits().removeAll(toBeRemoved); sqlRouteResult.getRouteUnits().addAll(toBeAdded); }