2019-03-21 16:52
@bobkuan 数据库在本机,可以重现这个问题? 那就太奇怪了,用排除法换台机器试试
druid 用了很多年了,从来没出现过这个问题
2019-03-21 16:47
@hb963724769 CacheInterceptor 做得比较早,是为控制层而做的,但你可以参考它写一个可以用于 service 层的拦截器,实现方式都是似的
2019-03-21 16:43
@mr_wangyan 这种需求在拦截器里面使用 Db.tx 机制实现起来简单,下面给出 jfinal 拦截器的实现方式:
Db.tx(() -> {
try {
inv.invoke();
return true;
} catch (Exception e) {
Transactional tx = inv.getMethod().getAnnotation(Transactional);
Class rollbackFor = tx.rollbackFor;
if (e instanceof rollbackFor) {
return false;
}
Class noRollbackFor = tx.noRollbackFor;
if (e instanceof noRollbackFor) {
return true;
}
// 其它异常是否要回滚,选择 return xxx
return true;
}
});
与上面的方式类似,你可以使用 spring boot 的拦截器也来实现 Db.tx 机制
2019-03-21 11:46
@mr_wangyan 参考 jfinal 的 Tx 拦截器,在 springboot 里面也做一个 springboot 的拦截器就可以了,机制是一样的,只是实现方式不同
你甚至可以将拦截器的代码进一步简化,直接在 Spring boot 的拦截器用上 Db.tx 就可以了
2019-03-21 10:53
@l745230 做这个功能倒是容易,但认知成本会高一些,例如,当既配置 include 又配置 exclude 时,要怎么来执行
站在 jfinal 的角度并不是很清晰地可以把握
2019-03-21 10:51
@veky 一般来说 cron 表达式就完全控制了调度逻辑,所以中途用代码关闭调度的情况不多