<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 多庫多租戶 ? 如果每個庫一個租戶,則需要動態路由到指定的數據源,可以借助ConditionalConnectionSource類,類似ConditionalSQLManager,可以代理ConnectionSource,根據適當條件使用返回不同數據源的數據庫連接 > 參考S6MoreDatabase.multipleDataBaseAndTables ```java public class ConditionalConnectionSource implements ConnectionSource { Policy policy; Map<String,ConnectionSource> all; ConnectionSource defaultCs; /** * * @param policy 選擇數據源的策略 * @param all 所有備選的數據源表 */ public ConditionalConnectionSource( Policy policy,Map<String,ConnectionSource> all){ this.all = all; String defaultName = policy.getMasterName(); defaultCs = all.get(defaultName); if(defaultCs==null){ throw new IllegalArgumentException("根據 "+defaultName+" 找不到對應的ConnectionSource"); } this.policy = policy; } //忽略其他代碼 } ``` 構造ConditionalConnectionSource 需要一個策略類以及多個ConnectionSource構成的Map。策略類決定了使用哪個ConnectionSource。定義如下 ```java @Override public Connection getConn(ExecuteContext ctx, boolean isUpdate) { String name = policy.getConnectionSourceName(ctx,isUpdate); ConnectionSource cs = all.get(name); if(cs==null){ throw new IllegalArgumentException("根據 "+name+" 找不到對應的ConnectionSource"); } return cs.getConn(ctx,isUpdate); } ``` 策略類可以根據ThreadLocal,或者ExecuteContext提供的參數來決定返回哪一個ConnectionSouce,這個跟ThreadLocalSQLManager,ConditionalSQLManager原來類似。Policy定義如下 ```java public static interface Policy{ String getConnectionSourceName(ExecuteContext ctx, boolean isUpdate); String getMasterName(); } ``` 如下根據VipLocal的值來決定使用哪個數據源操作。 項目可以在Controller的Filter或者Service的AOP里設定這個值 ```java ConditionalConnectionSource.Policy policy = new ConditionalConnectionSource.Policy() { @Override public String getConnectionSourceName(ExecuteContext ctx, boolean isUpdate) { String name = VipLocal.get() if(name!=null){ return name; }else{ // 如果沒有設置,則返回一個默認庫 return "cs1"; } } @Override public String getMasterName() { return "cs1"; } }; ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看