首页
App
&
Coffee
文档
项目
分享
反馈
俱乐部
登录
注册
一点疑问
chcode
2022-05-26 15:13
独立版本的activerecord 这样会不会导致异常被吃掉而没有任何报错
项目:
JFinal
1
评论区
chcode
2022-05-26 15:32
@杜福忠
热心大佬
回复
杜福忠
2022-05-26 15:58
@chcode
单纯说上图的代码,异常是吃了。
从使用者功能角度来说不影响,业务异常了有ActiveRecordException会抛出。
conn.setAutoCommit(autoCommit);回填的是另一波业务的,一般在数据库链接挂掉了再设置时就异常了,但是下回其他业务也调不到这个链接了(假定用的DruidPlugin),所以没啥事
回复
JFinal
2022-05-29 11:21
独立版本的 activerecord 不依赖 log 模块,要去掉所有 Log.xxx 有关的代码这是出发点
去掉以后,为了不丢失异常,多数地方应该要抛出异常给上层,上层再做日志就能保全异常信息,通常上层用一个全局拦截器即可收集所有这类异常
为啥没有继续向上层抛出,是因为 finally 上方还有一个 catch (Exception e) ,那么当 catch 与 finally 同时出现异常,catch 中的异常将丢失,但 catch 中的异常远比 finally 中的重要
因为 catch 中多数是与 sql、参数甚至业务有关的异常,而 finally 中可能就是一个数据库连接断开的异常
最后 finally 的 conn.setAutocommit(..) 出现异常的概率极低,综上考虑 ......
回复
zzutligang
2022-05-30 15:48
波总的思路很有道理
回复
jfinal爱好者22
2022-05-30 17:41
看波总的代码,对自己能力提升很大。
回复
JFinal
2022-05-30 19:36
@jfinal爱好者22
jfinal 中大部分代码是 10 年前的,最简洁的设计在 com.jfinal.template 下面,即便是这下面,也是 2016 年的代码了
回复
fmpoffice
2022-05-31 09:53
@JFinal
jfinal 中大部分代码是 10 年前 - > 要再升级一个 jfinal pua 版本吗?
回复
发送
我要反馈
热门反馈
扫码入社