private boolean isMasterRoute(final SQLType sqlType) { return SQLType.DQL != sqlType || MasterVisitedManager.isMasterVisited() || HintManagerHolder.isMasterRouteOnly(); } }
@Override public final void close() throws SQLException { closed = true; HintManagerHolder.clear(); MasterVisitedManager.clear(); TransactionTypeHolder.clear(); int connectionSize = cachedConnections.size(); try { forceExecuteTemplateForClose.execute(cachedConnections.entries(), new ForceExecuteCallback<Entry<String, Connection>>() { @Override public void execute(final Entry<String, Connection> cachedConnections) throws SQLException { cachedConnections.getValue().close(); } }); } finally { cachedConnections.clear(); rootInvokeHook.finish(connectionSize); } }
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()))); }
/** * Close cached connection. * * @param forceClose force close flag * @throws SQLException SQL exception */ public synchronized void close(final boolean forceClose) throws SQLException { Collection<SQLException> exceptions = new LinkedList<>(); MasterVisitedManager.clear(); exceptions.addAll(closeStatements()); exceptions.addAll(closeResultSets()); if (!stateHandler.isInTransaction() || forceClose) { exceptions.addAll(releaseConnections(forceClose)); } stateHandler.doNotifyIfNecessary(); throwSQLExceptionIfNecessary(exceptions); }
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); }
/** * Close cached connection. * * @param forceClose force close flag * @throws SQLException SQL exception */ public synchronized void close(final boolean forceClose) throws SQLException { Collection<SQLException> exceptions = new LinkedList<>(); MasterVisitedManager.clear(); exceptions.addAll(closeStatements()); exceptions.addAll(closeResultSets()); if (!stateHandler.isInTransaction() || forceClose) { exceptions.addAll(releaseConnections(forceClose)); } stateHandler.doNotifyIfNecessary(); throwSQLExceptionIfNecessary(exceptions); }
private boolean isMasterRoute(final SQLType sqlType) { return SQLType.DQL != sqlType || MasterVisitedManager.isMasterVisited() || HintManagerHolder.isMasterRouteOnly(); } }