3
回答
骚扰一下波总 想咨询下jfinal怎么处理postgres下的多schema场景?

@JFinal 你好,想跟你请教个问题:

jfinal已更新了2.0,看代码发现druidPlugin里好像没有对schema的部分进行处理.

由于我们的原始数据库由于是多schema的,因此很难切换到这个框架下面,不知道有没有什么好的解决方案?

举报
牛奶拌饭
发帖于3年前 3回/137阅
共有3个答案 最后回答: 3年前
    将多 schema 当成多数据源处理就好,不同的数据源配置不同的用户名和密码,这些多数据源的用户会看到属于自己的 schema,jfinal 多数据源用法见 jfinal 手册,在此下载: http://www.jfinal.com
你的意思是使用schema构造指定的连接池,再用这些连接池来构造activeRecord,druidPlugin里有填写指定schema的地方吗?我怎么没有找到

activeRecord和druidPlugin封装的太密了  所以手工改造不太好改 直接reload源码又感觉破坏了项目结构,也不太合适,所以我换了个方式,终于把问题解决了.这里给大家总结一下,方便后来人:

1).对于多schema的数据库产品,可以采用sql标准中的schema.table方式来直接访问处理.那么要做就是将表名转换成schema+表名的格式.这种方式只需要修改对应产品的方言类就可以解决.pg对应的方言类需要做些小改动才能复合格式(去掉引号之类)

2).需要切换schema的场景需要连接池先保持连接,然后从连接池里获取到对应的conn,直接通过各个数据库产品提供的jdbc驱动接口来完成conn的schema切换就可以,不要再指望连接池了。。当时细想了一下,连接池主要的工作是"数据源管理和池管理",数据源这里基本是固定的(多schema一般都是多租户场景),池管理这里,由于连接池组件往往需要兼容大多数数据库产品,在这个层级做schema特性适配,必然和方言的处理差不多,每个产品都有各自的特点,所以还是不做指望的好,直接通过连接做schema修改把,也算聊胜于无。。

实验了不少场景,只有这两个方案算是最有效的,应该可以解决大部分问题了,有碰到相同问题的小伙伴可以参考下.

顶部