2018-06-03 22:09

ExecutorService 与 AtomicLongMap 配合的使用性能会非常高,这个是亮点

有几个小建议:
1:saveAPICountsToDB.execute 中使用 lambda 会更简洁,省好几行代码

2:saveAPICallCountsToDB 中的 findFirst 方法中使用 sql 要添加一个 limit 1 性能才更好

3:saveAPICallCountsToDB 中的逻辑可以改进一下,性能会更高:
int n = Db.update("UPDATE yw_module_statistics SET count = count + ? WHERE controllerName = ? AND methodName = ? LIMIT 1", ...)

if (n == 0) {
Db.update("INSERT INTO....);
}

上面的逻辑是,默认一上来就执行 update ,得到的返回值 n 如果是 0,证明记录不存在,这个时间再执行 insert into

这样做的原因是,绝大部分情况下都会命中前一个 update,只有 action 在第一次被请求时才会命中后面的 insert into,避免掉了每次的 findFirts 判断是非常划算的

2018-06-03 21:58

@tt520 看一下控制台输出的 jfinal action report ,观察 action 请求的是那个

2018-06-03 21:56

pom.xml 配置错误

2018-06-03 21:55

启动数库事务与是否使用 cron4j 没有关系,只考虑业务是否要启动数据库事务即可

2018-06-03 21:53

@昵称而已 如果你使用的是 jfinal enjoy 引擎,热部署只需要配置一下:
engine.setDevMode(true)

2018-06-03 21:52

如果 jfinal action report 中的 parameter 这一栏中根本没有正确的参数,将精力集中解决于前端传参,然后再去关注后端

2018-06-03 21:51

看一下控制台输出的 jfinal action report 中的 parameter 这一栏中的数,然后再选择合适的 getPara 系方法

2018-06-03 21:49

主要取决于你的传值方式,看一下控制台输出的 jfinal action report 中的 parameter 这一栏中的参数,如果是数组会是下面这样:
szxm=[值1, 值2,......, 值n]

如果控制台输出的 szxm 不是数组的形式,自然就无法获取到

2018-06-03 21:47

模板中使用了 user.id, 但你的 user 本身是 null ,因此 user.id 就相当于 null.id ,必然会报错的

jfinal enjoy 对此引入了空合安全表达式,使用 user.id ?? 即可

2018-06-01 09:40

@jimchow 类似这样的 dependency 有很多,都仅仅是第三方集成 jfinal,而 jfinal 自身只依赖于接口,不会直接依赖于第三方

2018-05-31 22:15

@信阳 做个 MyVelocityRender 扩展一下 VelocityRender,然后覆盖父类的 render() 方法,将 VelocityRender 的所有代码 copy 到这个 render() 方法中

在这个 render 方法中添加一个 try catch,对所有异常做个明确的日志,看看 getTemplate(view) 是在 view 值是什么的时候出现的 null pointer 异常就能清楚地定位了

然后再做个 MyRenderFactory 以便切换到自己 MyVelocityRender:
public MyRenderFactory extends RenderFactory {
public Render getVeloictyRender(String view) {
return new MyVelocityRender(view));
}
}

最后配置一下即可:
public void configConstant(Constants me) {
me.setRenderFactory(new MyRenderFactory());
}

2018-05-31 22:08

injectListBean 可以注入 List Bean 数据,这个功能是 jfinal 所没有的,感谢你的分享

前几天还有人问题这个功能呢,好像是 @山东小木 问的这个需求,看看这个是否满足 @山东小木 需求

2018-05-31 22:05

@潇洒太爷 这个是正解,感谢你的分享,赞

2018-05-31 22:05

jfinal 没有用到 spring 的功能, pom.xml 中有一个 spring 的 dependency , 仅仅是 scope 为 provided,也就是说这个仅用于编译 jfinal 自身,并不会强制用户的项目依赖 spring

对于 spring 的 dependency , 仅仅是让 spring 可以集成使用 jfinal 的 enjoy 引擎,而并不是让 jfinal 使用 Spring 的功能

2018-05-31 22:02

input 表单域中的 name 都是以 main 打头的,所以 getBean(Xtsz_User.class) 要改成:
getBean(Xtsz_User.class, "main")

如果不改 getBean 参数的话,可以改 input 表单域的 name 前缀,例如:
name="xtsz_User"

input 表单域 name 值的规则是 Model 的类名的第一个字母变小写,也就是 Xtsz_User 对应于 xtsz_User