2017-09-27 21:19

shrioFilter 配置在 JFinalFilter 之后试试, filter 的生效是有先后次序的

2017-09-27 21:18

实现一下 ITokenCache 接口,然后通过 me.setTokenCache(new MyTokenCache()) 即可切换到自己的实现

ITokenCache 接口只有 put remove 等基本的方法,具体实现为 redis 还是数据库都很方便,别忘了搞定后回来分享一下哈

2017-09-27 20:22

@喜欢自在 文章中的用法性能没有问题

2017-09-27 18:13

正常的 404 应该是出现jfinal 的 404 页面,类似于这个页面:
http://www.jfinal.com/a/b/c/d

而你出现的是 jetty 的 404 页面,证明 jfinal 并未真正启动,可能是 web.xml 中的配置有误

2017-09-27 18:10

我记得 cron4j 的表达式只有五个部分,而你的代码中是 6 部分,先拿全部是 * 号的表达式测试一下,然后改成自己想要的表达式

多数错误是表达式写错而引起的,建议看一下 jfinal 手册中有关表达式每个部分的说明,参照着做就好

2017-09-27 18:08

有些情况 contextPath 为 "/",所以要对此进行判断,而为 "" 的情况,正好 length() 值为 0,这段代码依然正常

2017-09-27 16:32

后台管理部分做得不错,点赞收藏一个

2017-09-27 16:10

如果用了 public static final Xxx me 并且配合 private 构造方法,则就会变成单例的,因为 private 构造方法可以阻止 new 出对象来

通常只要将业务层做成无状态的,让所有状态都放在数据库或者共享的中心缓存中,就可以使用这种模式

不仅省去了 IOC 容器、省去了大量的 XML 或 annotation 进行注入装配、提升了性能、减少了代码量,而且还无比简单好理解。

更重要一点就是:无状态的业务层,让分布式与集群变得无比方便,无状态的业务层为下一步的分布式与集群做好了充分的准备

2017-09-27 12:07

不是有没有必要, 而是必须要引入,以前老版本的 demo 仅仅是演示,没入 service 进去误导了不少人,新版本的 demo 加入了 service

2017-09-27 11:34

补充一下,如果逼不得已经使用 /friendship/rKJGdAKPm/profile 这样的路由,也只需要添加一个 Handler 做下转换就好,有几个用户在对接第三方的时候碰到这种需求就是通过 Handler 转换搞定的,非常容易

参考一下 jfinal 里的 com.jfinal.ext.handler 包下面的源代码,自己写一个

2017-09-27 11:33

你把指令扩展与 shared method 搞混了,再仔细看一下手册, shared method 是利用普通的 java 类,而不需要实现任何接口或继承任何类

2017-09-27 11:13

@liuvlun 如果你不使用 fst 序列化就可以删掉 fst 这个包,这样配置一下:
redisPlugin.setSerializer(new JdkSerializer());

2017-09-27 11:12

jfinal 路由规则的参数总是在最后一部分的,所以支持这样:
http://localhost:8080/friendship/profile/rKJGdAKPm

jfinal 路由有性能上的考虑,也有设计上的考虑,简单说一说:
1:性能上
jfinal 路由匹配不需要循环,也不需要正则匹配,多数情况下只有一次从 map 中取值的操作,性能达到极致,路由匹配代码只有 10 行

几乎所有的 web 框架在匹配路由时,都需要使用正则和循环,jfinal 路由匹配性能起码高一个数级

2:设计上
jfinal 路由的设计类比了方法调用:
methodName(p1, p2, ..., pn)

对应到路由的 url 为:
/controllerKey/methodName/p1-p2-p3...pn

这里的一个显著特征是参数永远在最后方,而不是掺杂在 methodName 或者 controllerKey 里面。基于上面的类比设计方法,如果破坏上面规则的话,方法调用相当于这样:
method p1, p2, ...pn Name()

显然不符合直觉

2017-09-27 11:02

@吃饱了晒太阳 也不是那么严格,但不要偏离太远,否则社区的内容就太杂了,有损大家的利益

2017-09-27 11:01

设置成多少合适取决于数据库类型,例如 mysql 在数据量到达 5 千还是 5 万后会自动提交一次,即便你设置成 10 万都是没有意义的

建议的做法是,根据数据量选择一个小于数据库支持的 size。这个 batchSize 本质是为了让开发者选一个小于数据库支持的 size 值,好在碰到异常时可以针对本次提交的数据进行回滚,当然,你得开启事务才支持回滚,开启事务的方式与其它数据库操作 API 是一样的方法

此外,再延升一下,数据库支持的 batchSize 可能与配置有关,而这个配置可能是缓冲区的大小,而不是一个 int 型数值,所以可能与你每条数据中包含的字段内容长度有关,这个没有深入研究过,有兴趣、有时间的朋友可以翻看一下 mysql 文档

我个人一般用 1000 2000 顶多 3000 的 batchSize,避免了自动提交,可以回滚事务