2020-04-13 10:24
当成是多数据源来使用就可以了,每个用户一个数据源:
https://jfinal.com/doc/5-14
如果是多用户要共享相同的 model , 那么可以用拦截器切换数据源,大至如下:
Connection conn = DbKit.use(configName).getDataSource().getConnection();
DbKit.setThreadLocalConnection(conn);
try {
inv.invoke();
}
finally {
DbKit.removeThreadLocalConnection();
}
注意上面的 DbKit.use(configName) , 这个 configName 参数就对应了不同的数据源,你要想办法动态获取这个值,不同用户登录你是能获取它的账号的,通过账号与数据源建立关联即可
2020-04-12 20:57
@netwild 你这个问题很有代表性,我特此写了一篇分享:
https://jfinal.com/share/2037
2020-04-12 20:09
配置 undertow.hotSwapClassPrefix 这个的思路是对的,但配置的值不对
jfinal 自身已经配置过了,所以你配置的 com.jfinal.plugin.activerecord. 完全是多余的没有必要
你要配置的是异常中提示的 "com/jfinal/plugin/activerecord/IBean" 的实现类,也就是实现了 IBean 接口的类
一般来说是你生成的 base model 实现了 IBean 接口,较大概率是由于你的 base model 打包到了 jar 之中,而不是在源码中,所以,你需要通过配置:
undertow.hotSwapClassPrefix=xxx.yyy. 来解决
其中的 xxx.yyy. 指向你打好的 jar 包中的,实现了 IBean 的 base model
2020-04-09 17:13
@onizukayao ApiConfigKit.setAccessTokenCache(new RedisAccessTokenCache());
2020-04-09 12:42
这类调用了 DbKit.close(preparedStatement) 的方法都抛出了 SQLException,而在外层会被 try catch 到它,并且会被调用 DbKit.close(connection)
而 DbKit.close(connection) 是会将从 connection 中打开的 preparedStatement 一并关掉,理论上来说是没有问题的
当然,不排除有些数据库驱动或者数据源连接池没有保障 connection.close() 后自动关闭 preparedStatement
所以,jfinal 4.9 已经使用 JDK 7 加入的 try-with-resources 语法对这个地方加强了:
https://gitee.com/jfinal/jfinal/commit/ea4eeefbc4e611e6f794fa77144528480778282e
jfinal 先前的处理方式用了很多年了,是没有问题的
2020-04-08 11:01
@zzutligang 提供更多的你的测试细节,才能找到原因
当前你给的信息量肯定是不够的