2016-07-24 12:10
有设置缓存,并且缓存是根据微信官方的 7000 秒来设置的,或许是你的程序在调用 API 时绕过了缓存去获取,也或许是多实例部署时没有共享缓存,造成了各自去获取时后一个实例获取到的 token 让前一个实例的失效了,仔细检查一下。 @Dreamlu
2016-07-24 11:24
@zqbc main 方法启动项目的一个本质特征就是默认不会去 WEB-INF/classes 加载类文件,而是从类似于 build/classes、bin 这样的路径下去读,所以 jfinal 手册第一章中用图片 + 文字就说明了要改掉 Default output folder
2016-07-24 11:23
@zqbc 如果你在 eclipse 外部直接启动 tomcat 、jetty,则不涉及到此问题。在 eclipse 中启动 jetty,本质上是用的一个 public void main 方法,无论你是配置的 com.final.core.JFinal 还是手动创建的 main 再 JFinal.start(...) 这都是 main 方法启动的
2016-07-24 11:21
@zqbc 我干脆直接说明错误原因吧:
1:在用 eclipse 创建 web 项目时,eclipse 默认会将编译后的 class 文件放在 build\classes 这个目录下面
2:而 web 项目在启动时默认会去 WEB-INF/class 下面去加载 class 文件
3:jfinal 手册中建议的大家启动 jetty 方式本质上是用一个 main 方法启动 jetty
4:问题来了,main 方法启动项目时会首先去 build/classes 读取类文件并加载,接下来 jetty 被启动,jetty、tomcat 这类 web 容器会去 WEB-INF/class 下面去加载 classes 文件
5:核心在于:main 方法从 build/classes 目录下面先加载了 JFinalDemoConfig,而 jetty 是从 WEB-INF/classes 下面加载的 JFinalDemoConfig,虽然名字一模一样,但却是不同的 class
6:所以 jfinal 手册中图文并茂地交待过在创建项目时,要将Default Output folder 中的 build/classes,改成 WebRoot/WEB-INF/classes
千言万语一句话:main 方法启动加载的 class 与在后续启动 jetty 后加载的 class 处于不同的目录之下,造成了冲突。这个问题如果不用 main 方法启动项目是不可能出现的
2016-07-23 17:02
@airwolf 感谢支持,更好用的新功能即将上线,还有无数好用的功能在开发列表中,jfinal 社区将打造成极致用户体验的极速开发社区
2016-07-23 11:27
@sdfsf 写了很多,那就多思考虑,单步调试一下 jfinal 源码,搞清楚 jfinal 的执行过程,深入了解架构设计
2016-07-23 10:47
@sdfsf 先打好基础,然后,多写代码,多思考,多看优秀的开源项目。有个关键点,不要迷信那些很有知名度的开源项目,要时刻保有颗批判的心去看待世间一切,包括看待 jfinal。jfinal 项目也是以此心态为依托,不断否定自我,不断提升,才有了今天的海量用户。