2018-12-26 14:40

@lyq027 接上一条补充,前面讲的将 upload 挪到别的地方,这个是让 jfinal undertow 可以当成 web 资源访问,你上传的时候要上传到这里,还需要如下配置:
configConstant(Constants me) {
me.setBaseUploadPath("/var/my-project/upload");
}

windows 系统下也是一样,只不过目录是下面这样的:
D:/my-project/upload
一定要是绝对路径才可以

2018-12-26 14:37

注意看 UrlSeoHandler 源码,去掉这个 handler 即可

2018-12-26 11:38

@yuer_2018 gradle 没用过,不能帮到你,但用法与 maven 应该是差不多的,解决好依赖问题就好

2018-12-26 11:33

通过在一个固定的配置文件中得到实际的配置文件名的用法很有创意,这个方案比那种写一堆代码搞一套约定的方式简单多了,感谢分享

2018-12-26 11:30

这个玩法很新颖,对于日志量大的项目很有用,赞

2018-12-26 11:10

@yuer_2018 以前是任何时候都可以发贴和回贴的,但网上打广告发水贴的那个群体正好是在我们睡觉后最活跃的,你懂的

可发贴可回复的时间大概在早八点半到晚十点半,可能有半个小时的不确定

2018-12-26 11:07

@mekain 解决就好,删掉 Jetty 的依赖在《极速上手》 中有过说明:
https://gitee.com/jfinal/jfinal-undertow

2018-12-26 11:05

这个方案无疑是在老版本 jfinal 1/2 中使用 enjoy 的最佳方案,十分简洁,并且没有任何副作用

这个方案还有一个可以改进的地方,老版本的 jfinal 也是可以通过 IRenderFactory 切换底层的 main render 的,通过实现 IRenderFactory 接口,可以将 Controller.render(String view) 这个方法的 view type 给切换到 enjoy

当然,如果你的老系统中 render(String view) 仍然在使用 freemarker 之类的使用 BaseController 扩展是最好的

感谢分享,点赞 + 收藏

2018-12-26 10:58

jfinal weixin 新版本主要是改变了配置方式,需要稍微看下文档才能升级:
https://gitee.com/jfinal/jfinal-weixin/wikis/Home

2018-12-26 10:57

基于上面的原理,其实还有很多方案,例如,在 mysql 中做一个临时表,例如叫 door_log 表,里面弄两个字段: door_log(long userId, datetime createAt),临时表只做辅助,可以在每天早上使用 Db.update("truncate table door_log") 进行数据清除

用户每次刷卡进入的时候,向这张表里面写数据,然后判断一下该 userId 的最大 createAt 与当前时间的间隔是否大于 10 秒即可,如果大于 10 秒才真正做日志:

Instant ins = LocalDateTime.now().minus(10L, ChronoUnit.SECONDS).atZone(ZoneId.systemDefault()).toInstant();
if (Db.queryLong("select userId where createAt > ?", Date.from(ins)) == null) {
做日志的代码
}

你也可以上上述逻辑用内存来做,在内存里面存放一个 List,里面放下 (userId, createAt) 这两个字段,道理是一样的

2018-12-26 10:28

不要用这种方式, 用一下 ehcache , 配置一个过期时间,大致过程如下:
1:用于这个功能的 ehcache 的 name 假定为 "doorLog",过期时间设置为 1 分钟

2:当用户扫码时,先去看 ehcache 的 doorLog 是否存在,如果存在则不做日志

3:如果 doorLog 不存在,则以用户 id 为 key 做一个日志,大致为:
if (CacheKit.get("doorLog", userId) == null) {
CacheKit.put("doorLog", userId, true);
log.logInfo(...) // 这里是做日志的代码
}

这里的关键就是 ehcache 中的 “doorLog" 的过期时间的配置,当过期时间一致,缓存中就没有数据了,那么前面的 if 语句就会为 true

2018-12-26 10:23

应该是 jar 包冲突,例如多个 servlet 的 jar 包有影响,检查一下

2018-12-26 10:21

谭总第一个分享,感谢

2018-12-25 20:58

jfinal 项目,起码要添加一个 jfinal 的依赖:jfinal-3.5.jar

2018-12-25 18:12

@action_dear60 jfinal 的数据库操作只对 JDBC 做了极薄封装,没有乐观锁方面的支持,建议在现有的体系下,看看哪里可以扩展一下