最新版jFinal取消了enhance,如何在service层开启事务?

原有:

在service某方法上添加了Tx拦截器,controller中使用enhance对service加强可开启事务。

现在:

service中对数据库操作分为了好几步,图方便直接在service某方法添加Tx拦截器。
在社区看到有大佬说不需要enhance也可以,但是测试发现并不行。


希望有前辈能够帮忙解答,谢谢

评论区

JFinal

2020-09-11 10:14

用 Aop.get(...) 即可,文档中都有

JFinal

2020-09-11 10:14

开启事务,我建议这么来用:
Db.tx () -> {
这里是数据库操作
});

JFinal

2020-09-11 10:15

上面的用法不仅代码简单,而且可以在内部使用 try catch 灵活控制。 还可以避免你的业务在用到别的场景时忘了开启拦截器

JFinal

2020-09-11 10:16

要知道,业务有可能被很多地方调用,而要保障所有地方调用时都记得用上拦截器,这个是容易出问题的

所以,我所有项目全部在业务方法内用的 :
Db.tx () -> {
这里是数据库操作
});

hb963724769

2020-09-11 11:29

//全局service添加事务拦截器
me.addGlobalServiceInterceptor(new Tx());

hysen

2020-09-11 11:31

hysen

2020-09-11 11:33

@JFinal 谢谢波总,因为service使用了多个dao层的业务操作数据库,如果在dao层开启事务的话,service层前方执行的某个业务操作成功,后方执行的某个业务操作失败了。这样前方那个事务就不会回滚了吧

hysen

2020-09-11 11:45

@JFinal 好的,解决。 THX

zzutligang

2020-09-11 11:47

@JFinal 我这里就是接受波总的建议,所有操作数据的地方都放在
Db.tx () -> {
这里是数据库操作
});
这样操作,保险

Code_Cat

2020-09-15 14:29

@JFinal 这个是java的lamda表达式吧,假如低版本的java不支持怎么办呢

石头809155072

2020-09-19 10:29

可以这样。
Db.tx(new IAtom() {

@Override
public boolean run() throws SQLException {
// TODO Auto-generated method stub
return false;
}
})