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类似,可以参考一下。
posted @ 2017-09-07 15:52  啊朋  阅读(2997)  评论(0编辑  收藏  举报