版本是5.1.1,在Config onStart中已配置:
Tx.setTxFun((inv, conn) -> { inv.invoke(); Object returnValue = inv.getReturnValue(); if (returnValue instanceof Ret) { Ret ret = (Ret) returnValue; if (ret.isFail()) { conn.rollback(); return; } conn.commit(); } });
在Service中这样写:
@Before(Tx.class) public Ret save(CLA2 o, KB02 kb02) throws Exception { //业务代码 return Ret.ok(); }
在工开发电脑上没有出现问题,更新到服务器(linux/windows service)上,有些服务器也没有问题,但有些电脑又出现500错误,跟踪发现,Controller中使用到了这个Servcice,并且是使用@Inject注入,无法访问到这Controller中的方法,直接500.
如果修改为这样:
public Ret save(CLA2 o, KB02 kb02) throws Exception { final Ret ret = Ret.create(); Db.tx(() -> { try { //业务代码 ret.ok(); return true; }catch (Exception e) { ret.fail(); return false; } return ret; }
这样写又没有问题了,适用所有服务器,都不会报500.
请问大家有没有遇到过这种情况?
项目:JFinal
此外,建议升级到最高版本