2017-07-16 10:53

这段同步代码去掉也可以让程序正常工作,但是 cacheManager.addCacheIfAbsent(cacheName); 方法上有 synchronized 关键字,添加一个针对线程的 double check 是为了提升点性能

当然 getOrAddCache(...) 应该不算热点代码,通常情况下就算不用 double check 模式对性能应该也不会影响

2017-07-16 10:26

redis 有一个 Cache 类,其中有很多方法,相当于是 API,一是如果 redis 后续增加了 API,那么理论上来说 redis plugin 也需要相应升级跟上 jedis 的升级。二是 Cache 类是确实没有完全支持 jedis 中的方法,因为 jedis 中的方法太多了,有些我自己也没有用过,或者用的人少,当时就没有做进去

要支持更加全面的 jedis 功能,可以考虑下面两种方式
1:做一个 RedisExt 扩展类,里面依赖 Redis、Cache 的相关功能获取 Jedis 对象,去实现一些功能
2:改 jfinal redis 插件源代码,在 Cache 中添加实现

jfinal 后续版本也会根据需求来添加更多 API

2017-07-15 22:46

urlPara 默认是可有可无的,有很多方法可以改变默认配置,以下方法选择一个:
1:在index() 中调用一句 checkUrlPara(0); 还可以 check 最少和最多允许的 url 数量:checkUrlPara(minNum, maxNum)
2:为 action 配置拦截器 @Before(NoUrlPara.class),或者将该拦截器配置成全局的:me.add(new NoUrlPara()),这样可以一劳永逸

为了便利性 urlPara 默认是自由化的,可以传 0 个至 n 个

2017-07-15 16:02

当你在整个请求周期中未调用过任何 render 方法,那么 jfinal 会默认帮你调用一个,规则是:
render(view)
view = baseViewPath + viewPath + methodMame + ".html"

2017-07-15 11:44

终于来了,api 十分简洁,超赞

2017-07-15 11:42

做个拦截器,大致代码如下:
public void intercept(Invocation inv) {
log.info("调用 action 之前做日志");
inv.invoke();
log.info("调用 action 之后做日志");


然后将此拦截器配置成全局拦截器: me.add(new MyLogInterceptor());

建议稍微看一下 jfinal 手册,这是最基本的功能,其中 Invocation 中还有很多实用的方法可供调用,例如 inv.getActionKey() 等等

2017-07-14 12:20

@linuxea 升级到新版本,不要忧郁

2017-07-14 10:48

我建议你先写成一个 sh 脚本然后去调用,千万注意一个事情,环境变量是在每次打开linux shell 时临时给定的,所以你这种运行的方式并未打开一个 shell,很多环境变量是无效的

在脚本最前方加上让环境变量生效的 shell 脚本,最后就是要搞定一下这个异常:
error=2, No such file or directory

2017-07-13 23:26

做一个 public MyDialect extends OracleDialect,覆盖掉其中生成 paginate sql 的方法,改一下里面的生成逻辑就可以

按理说这个不会影响性能

2017-07-13 23:07

@kun 正是要做的,目前做得确实不好,直播逐步会做起来

2017-07-13 22:18

@kun model 采用的是 active record 模式,该模式的核心是一个 model 对象唯一对应一条数据表记录,这个对应关系用的就是主键,所以 model 对应的表,必须有主键

如果没有主键,使用一下 Db + Record 方式操作下数据库

2017-07-13 22:17

改下命令:"pyhon" 改成 "python"

2017-07-13 18:00

@UniqueStone Json.getJson().parse(jsonString, YourModel.class)

2017-07-13 17:59

用一下 fastjson,得到 jsonString,然后:
renderJson(JsonString)