数据库多源的问题
悟宁 发布于41月前 6答/769阅

我的原始需求是:

业务中使用到了第三个数据源叫log,配置好后通过元数据导入可以正常导入log源中的表;实现过程中遇到的问题:

在一个自定义接口中需要查询log源中的一些数据,通过List nodeList = Db.use("log").find("select name, value from dicts_log where pid=6 order by order_num");

去查询,直接报错提示找不到表,经过分析确认查询时仍然是使用了默认的main源去找的,所以才会找不到,很奇怪到底是哪里出了问题???

尝试过通过git回退代码到早期的正常时的版本,问题依旧,请问有可能数据库中什么地方的配置会导致这种问题么??我觉得这个问题的原因是:



[沙发] Jieven
@悟宁 贴一下jdbc.config
[地板] Jieven
@悟宁 直接报错提示找不到表 还有报错
[地毯] 悟宁
#默认数据源
main_url = jdbc:mysql://******?characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
main_user = ***
main_pwd = ***

#Eova数据源
eova_url = jdbc:mysql://***:3306/eova?characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
eova_user = ****
eova_pwd = ***

#log数据源
log_url = jdbc:mysql://***:3306/*?characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
log_user = ****
log_pwd = ****

我验证过Db.use("eova")可以正常查到eova源里的表数据
Db.use("log")后面如果去查默认main源里面的数据,也可以查到,所以基本可以判定是use对于第三个源没有生效,所以仍然使用默认源

ps:居然不能贴图,吐槽一下
[4楼] 悟宁
@Jieven 试用一下这个功能
[5楼] 悟宁
@Jieven  以下是我新增源的代码
private ActiveRecordPlugin addDataSource(Plugins plugins, String datasource, String dbType) {

// 添加数据源
String url, user, pwd;
url = props.get(datasource + "_url");
user = props.get(datasource + "_user");
pwd = props.get(datasource + "_pwd");

WallFilter wall = new WallFilter();
wall.setDbType(dbType);

DruidPlugin dp = new DruidPlugin(url, user, pwd);
dp.addFilter(new StatFilter());
dp.addFilter(wall);

ActiveRecordPlugin arp = new ActiveRecordPlugin(datasource, dp);
// 方言
arp.setDialect(new MysqlDialect());
// 事务级别
arp.setTransactionLevel(Connection.TRANSACTION_REPEATABLE_READ);
// 统一全部默认小写
arp.setContainerFactory(new CaseInsensitiveContainerFactory(true));
// 是否显示SQL
arp.setShowSql(true);
System.out.println("load data source:" + url + "/" + user);

plugins.add(dp).add(arp);

// 注册数据源
dataSources.add(datasource);

return arp;
}

这部分既然能成功导入源数据,那理论也没啥问题吧
[6楼] Jieven
@悟宁 老铁,升级到beta4吧,你这个用法已经过时了!
http://doc.eova.cn/001/1-1.html
提交评论
嘿,我来帮你!