2016-09-17 11:14

全程没有使用事务,必然会有问题,核心在于任务调度线程在获取 task 记录,并让该记录的 lock 由 0 变 1 的过程在事务中并且是排它的,核心代码大致是如下的形式:

final Ret ret = Ret.create();
boolean isOk = Db.tx(new IAtom() {
public boolean run() {
Task taskList = Db.find("select * from task where lock=0");
String idList = IdKit.join(taskList); // 将 taskList 的所有 id 变成这样:(1,2,3)
int n = Db.update("update task set lock=1 where lock=0 and id in" + idList);
ret.put("taskList", taskList);
return taskList.size() == n && n > 0; // 只有取出来的数量与更新数量相同时才可以提交事务
}
}

if (isOk) {
处理 ret.get("taskList")
} else {
未获取到可处理的 task
}

2016-09-15 17:59

search() 方法中是在 render("article_search_list.jsp"),而提示却是 /admin/article/search.jsp 页面找不到,很明显是该 render 方法未被执行,进而推断出 search() 方法未被执行,再进而推断出是有拦截器未让该请求前行至 search() 方法

看一下控制台输出的 JFinal action report 就全明白了

2016-09-15 10:42

@海哥 应该是四年多,简单够用,quartz 过于庞大

2016-09-14 17:45

@zy625080069 jfinal 手册中有详细说明,在此下载手册:http://www.jfinal.com/download?file=jfinal-2.2-manual.pdf

2016-09-14 17:30

估计是 ActiveRecordPlugin 没启动

2016-09-14 17:29

@精彩飞扬 这下有需要同学直接 copy 就可用了,又节省了一半以上的时间,感谢分享

2016-09-14 17:27

没实际用过 javamelody 这个东东,很久看到过,貌似就放入 jar 包,改下 web.xml 就可以用了。将 jfinal 项目当成普通的 java web 项目来用就可以了

2016-09-14 16:31

@cnzzr jfinal 官方出品的插件必然好用

2016-09-14 16:30

ActiveRecordPlugin 启动没有? me.add(arp) 这行代码没?

2016-09-14 11:51

@sphsyv 为保障 jfinal 的极简性,能被划分为 jfinal 核心的常用的功能才会被做到 jfinal.jar 中去,所以 jfinal 开源四年以来,经历过 20 多个版本的升级,仍然保持在 300KB 左右大小的体积

jfinal 内部的插件与 Kit 绝大部分都可单独使用,多多支持社区发展

2016-09-14 11:18

@IvyHelen 所以 jfinal 社区会更负责任地为大家提供专注的优质分享,而不是来很多娱乐性地、扯淡的内容来浪费大家的生命,这个世界不缺少娱乐,有太多娱乐在消耗着大家的青春

2016-09-14 10:40

@精彩飞扬 能否编辑一下这个贴子,将其中的图片,换成代码的方式,这样大家在用的时候,可以直接 copy,否则手动输入的时候可能会出错。

社区的可视化编辑器里面有一个按钮专门支持写代码的,缩进就用一下两个空格,提交保存后的样式会非常好看,这里可以看到贴代码以后的样式,非常好看: http://www.jfinal.com/project/1

2016-09-14 10:36

@精彩飞扬 再次感谢你的分享,已经点赞加收藏了,以后有人需要的话,我就直接给出这个链接了,省好多事