2017-03-21 21:51
使用拦截器支持事务时,不要将内部的异常吃掉,所以 try catch 中需要将异常再次抛出来,这个可能是在你的代码中没有支持事务的根本原因
此外,还要注意 mysql 只有 innodb 引擎才支持事务,myisam 天然不支持事务,还要注意事务级别是否匹配当前的数据库操作,如果是 jfinal 3.0 版本,默认级别比较高,一般不需要调整
最后,上面的代码中,既然 savePay 中已经使用了 @Before 声明了事务,那么在 enhance 时就不需要添加 Tx.class 这个参数了
最后的最后,个人一般建议直接使用 Db.tx(...) 的方式支持事务,控制起来更加方便,例如,可以 try catch,然后在 catch 中 return false 就可以控制事务回滚了,然后通过得到 Db.tx(...) 方法的返回值再控制对上层响应什么返回值会更方便
2017-03-21 16:34
@zhaozhihong sql 中最后的分号去掉没有,注意将 sql 彻底改造成 JDBC 支持的格式
2017-03-20 21:03
@广州雨人 参考一下这些博文:https://www.oschina.net/search?scope=blog&q=jfinal%20dubbo
2017-03-20 19:33
有了对比,才会在认知上更有深度,spring 由于过于繁琐庞大、过度设计、配置文件满天飞,所以才会出现 spring boot 这个项目给 spring 做简化工作,而 spring boot 中的很多功能 jfinal 早在五年前就有了,例如零配置、java config 这类概念、热加载,减少代码量等等设计目标
spring boot 本质上是在重走 jfinal 五年之前就开始走的路,但是 spring boot 底层仍然基于 spring 这个庞然大物,开发者看到的仅是浮出海面的冰山,而隐藏在海水之下的山体才是更大的麻烦,所以很多 spring boot 用户在开发过程中会不断要去学习 spring 有关的概念
jfinal 是极简设计,学习成本极低,WEB MVC + ORM + Template Engine 所有功能仅有 400K 左右的 jar 包,比 spring 体系要小得多,所以无论大家是否想用 jfinal 开发,掌握 jfinal 都是很容易并且值得的
2017-03-20 19:25
@hmgx jfinal 3.0 已经直接支持该功能,参考一下 jfinal 手册有关 cron4j plugin 这一章节
2017-03-20 18:51
@abvcb 如果是非浏览器客户端,而是专用的 http 客户端,确实可以直接在 http 协议中体现 PUT、DELETE 这类请求类型,但这样做其实没什么必要,而在 url 中放入请求类型在语义上表达更为明确,站在 API 的使用者的角度看,更容易理解,可读性也更强
从开发实践的角度来说,在代码中必须去指定某 action 为某请求类型,这也会增加代码量,拉低开发体验。抽象资源用什么请求类型映射至某个 action,要么用约定的方式,要么用注解或配置的方式指令,这都会增加学习成本,但却看不到一点好处