动态启动多数据源连接,Enjoy SQL模板无法共用问题

一个SAAS项目中建了一个main主数据库,里面存放了客户各个数据库的连接地址。

客户的数据库表结构是一模一样的

客户登录时,先到main主中获取相应的数据库连接,然后从相应的客户数据库中获取数据。


现在问题是:

使用Db.use(dbid).template(......) 无法获取数据。

但AppConfig里写死一个连接是可以使用这个SQL模板方式获取数据。

Enjoy SQL模板只能一个数据连接配置一套模板吗?

能否一套SQL模板文件,可以给到所有相同表结构的数据库都能使用呢?


评论区

JFinal

2024-07-04 09:59

你的用法本来就是对的,多数据源就是这么用的: Db.use(dbid).template(......)

调试一下,是别的原因引起的

liugz

2024-07-04 10:14

@JFinal Db.use(dbid).template(......)里面的dbid写死启动类中配置启动的数据源是没问题的, 但在项目启动后,根据租户动态开启数据连接dbid,就会取不到数据

JFinal

2024-07-04 10:25

@liugz "动态开启数据连接dbid" 是啥意思?

是动态创建了 Config 对象吗? 看一下 DbKit 中有关 config 对象的添加、移除,Db.use(...) 方法依赖 DbKit 中对 config 对象的管理

调试一下 DbKit 中的几个方法

zzutligang

2024-07-04 10:35

我知道他的意思,和我的处理方法一样,但有个问题,不同的数据库连接config只能使用自己的一套模板,除非你在动态启动这个数据库连接的时候,把这个共享模板路径加到这个数据库连接里。另外。我最初搞saas也是这么搞的,但后来就遇到这个很大的问题,用户越来越多后,你的起的数据库连接就太多了,这是个很大的问题。后来我的就改成一个业务数据库,但库结构使用租户ID区分了。反正各有优缺点。

杜福忠

2024-07-04 10:35

@liugz 加我 wx:dufuzhong 多租户多数据源模式我很有经验。多ActiveRecordPlugin和多DruidPlugin启动是不一样的处理方案

liugz

2024-07-04 10:44

@JFinal 非常感谢,已经解决了。是在动态启动数据源连接时要arp.addSqlTemplate(...)。 开始以为是AppConfig中配置了一次,就所有数据库都可以用了的。

liugz

2024-07-04 10:50

@zzutligang 同道中人,这两种模式我们都搞,看客户体量来

liugz

2024-07-04 10:53

@杜福忠 非常感谢杜老哥,以后多多跟你请教。 [抱拳]
JFinal还是挺灵活的,很适合我们这种动态多数据连接和SQL取数业务复杂的场景

热门反馈

扫码入社