package io.mycat.route.factory; import io.mycat.MycatServer; import io.mycat.route.RouteStrategy; import io.mycat.route.impl.DruidMycatRouteStrategy; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; /** * 路由策略工厂类 * @author wang.dw * */ public class RouteStrategyFactory { private static RouteStrategy defaultStrategy = null; private static boolean isInit = false; private static ConcurrentMap<String,RouteStrategy> strategyMap = new ConcurrentHashMap<String,RouteStrategy>(); private RouteStrategyFactory() { } private static void init() { String defaultSqlParser = MycatServer.getInstance().getConfig().getSystem().getDefaultSqlParser(); defaultSqlParser = defaultSqlParser == null ? "" : defaultSqlParser; //修改为ConcurrentHashMap,避免并发问题 strategyMap.putIfAbsent("druidparser", new DruidMycatRouteStrategy()); defaultStrategy = strategyMap.get(defaultSqlParser); if(defaultStrategy == null) { defaultStrategy = strategyMap.get("druidparser"); } } public static RouteStrategy getRouteStrategy() { if(!isInit) { init(); isInit = true; } return defaultStrategy; } public static RouteStrategy getRouteStrategy(String parserType) { if(!isInit) { init(); isInit = true; } return strategyMap.get(parserType); } }