2020-05-21 17:23

@tctc4869 controllerKey 顾名思义,它是 controller 的唯一 key,所以是被独占的,不能与多个 controller 共享

目前的解决办法是让某一个 controller 独享这个 controllerKey,然后在其它需要共享的地方使用 @ActionKey, 当然,这个注解只能用在方法上

你提的这个需求只有极少数人提出来过,目前看来需求并不是太大

jfinal 的路由做成当前的样子当然也是有很多考虑的,不可能支持所有需求,有一定的取舍,例如要考虑性能、学习成本等等

还要考虑对用户的代码有一定的规范性指导,每一个 controller 一个 key 值,对于模块化或者 restful 风格有一定的约束,会带来一些用户在浅层感受不到的好处,但对用户的代码切实有利的好处

2020-05-21 17:17

已经在 jfinal-com.css 中添加了控制样式,已解决,谢谢你的反馈

2020-05-21 17:08

@jpress @海哥 这个项目是 jpress 中出现的,检查是不是 jpress 有内存泄露问题

2020-05-21 17:07

@chcode 这个是极端正确的方法

Db + Record 一开始就是作为 Model 的补充存在的。例如 Model.update() 无法做到的按条件批量数据更新,而 Db.update("update ... where ...", ...) 就可以轻松做到

2020-05-21 17:03

这个是用的 freemarker 吧?

freemarker 的用法我记得是这样的,应该不会有错

2020-05-21 17:01

@javaTony jfinal 对 batchSize 没有最大限制,而数据库自身是有的,例如 mysql 对其的最大值取决于 batch 缓冲区的大小,缓冲区满的时候会自动提交,而这个是不受 jfinal 控制的

所以 batchSize 建议不要设置太高,例如 5000 以内

2020-05-21 14:54

@david-J 建议走阿里云的 maven 库,国外的库太慢了

2020-05-20 14:46

可以使用 @ActionKey 注解

此外, controller 中的代码应该要极少,所以一般无需拆分。如果想拆分,先警惕一下是不是业务逻辑写在了 controller 中

绝大部分代码应该放在 service 中

2020-05-18 14:36

贴出代码看看问题,原贴可以修改

2020-05-18 12:32

直接 new MessageService() 那么用在 MessageService 中的拦截器就不会生效,全局拦截器也不会生效

Aop.get(...) 主要有两个作用:
1:判断目标类是没有拦截器,如果有的话就生成代理对象,让拦截器生效
2:向目标类中使用 @Inject 的属性注入依赖

多看下文档

2020-05-18 12:28

@chance_xym sysout 不可靠, jfinal.com 官网的定时任务用的是插入数据库的方式:
// 每次调度启动时,向 task_run_log 写日志,用于检查调度的时间是否与预期的一致,避免出现 bug 却不知道
Record taskRunLog = new Record().set("taskName", "PageViewUpdateTask").set("createAt", new Date());
Db.save("task_run_log", taskRunLog);

事先建一个表:
task_run_log, 字段名有:id、taskName、createAt

注意:写日志代码一定要放在最前面,否则 task 运行如果有异常,这条日志就不会写入

我怀疑你的 task 已经被运行,但有异常,所以你察觉不到其已经运行。Cron4jPlugin 我用了好多年,从来没有碰到过问题

2020-05-17 19:58

在被调度的第一行代码处做日志确认一下

2020-05-17 19:57

注入必须是从 controller interceptor 为起点才能注入

否则要使用 Aop.get 或者 Aop.inject

注意看文档

2020-05-16 22:09

import 一下 DruidPlugin

2020-05-15 15:10

这个纯粹是路由的问题,检查一下路由映射

jfinal 路由很简单,只有四种类型,看看文档 10 分钟内全部掌握