因為項目需要從多個數據庫取數據,所以需要配置多個數據源
嘗試了ActiveRecordPlugin和DruidPlugin的多數據源,但是因為DruidPlugin在本地一直報錯一個很奇怪的語法錯誤,所以就選用了ActiveRecordPlugin
總的來說就是多個數據源配置多個ActiveRecordPlugin
直接使用如下代碼即可,不過因為我是太多的數據源不想一個個定義plugin,所以就選用循環讀取文件的形式
int i=0; while(true){ if(PropKit.get("jdbcUrl"+i)==null){ break; }else{ C3p0Plugin cp = new C3p0Plugin( PropKit.get("jdbcUrl"+i), PropKit.get("user"+i), PropKit.get("password"+i), PropKit.get("driver"+i)); cp.setInitialPoolSize(3); cp.setMaxIdleTime(10); cp.setMinPoolSize(3); cp.setMaxIdleTime(6); me.add(cp); ActiveRecordPlugin arp = null; if(i>0){ arp = new ActiveRecordPlugin("db"+i,cp); }else{ arp = new ActiveRecordPlugin(cp); } // arp2.setDialect(new AnsiSqlDialect()); 連接 sql2008 特有的解決字符 問題 if(PropKit.get("driver"+i).indexOf("mysql")>-1){ arp.setDialect(new MysqlDialect());///mysql } else{ arp.setDialect(new SqlServerDialect());///sqlserver } me.add(arp); //配置數據表映射寫到一個文件中 if(PropKit.get("state"+i).indexOf("pro")>-1){ DbMappingKit.mapping(arp); }else if(PropKit.get("state"+i).indexOf("fb")>-1){ FbMappingKit.mapping(arp); }else if(PropKit.get("state"+i).indexOf("wx")>-1){ WxMappingKit.mapping(arp); }else if(PropKit.get("state"+i).indexOf("center")>-1){ TaskCenterMappingKit.mapping(arp); } } i++; }
其中
arp = new ActiveRecordPlugin("db"+i,cp); 是給除第一個以外的其他鏈接建立連接別名。
我們常用的DB.update(sql),默認使用么有別名的第一個數據源。
Db.use("db1").update(sql); 這樣可以使用其他數據源
與http://jingyan.baidu.com/article/7f41ecec3b2b0e593d095c35.html類似,可以參考一下。