一点疑问

image.png

image.png

独立版本的activerecord 这样会不会导致异常被吃掉而没有任何报错

评论区

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 版本吗?