jfinal多数据源ActiveRecordPlugin
因为项目需要从多个数据库取数据,所以需要配置多个数据源
尝试了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类似,可以参考一下。