2020-04-03 10:53

当有多个地方同时使用同一个微信公众号的 appId 去申请 token 时,当前申请的 token 会立即让前一个申请的 token 失效

也就是说:同一公众号(appId), 同一时刻,只有一个 token 有效,其它 token 会立即失败

所以开发的时候一定要注意这种情况

jfinal weixin 特意为这种请求做了一个 LocalTestTokenCache.java 用来支持服务器部署 + 本地开发共用同一个公众号的组件:
https://gitee.com/jfinal/jfinal-weixin/blob/master/src/main/java/com/jfinal/weixin/sdk/cache/LocalTestTokenCache.java

使用的时候,在本地开发的项目中配置:
if (isLocalDev) {
String onLineTokenUrl = "http://localhost/weixin/api/getToken";
ApiConfigKit.setAccessTokenCache(new LocalTestTokenCache(onLineTokenUrl));
}

上述代码中的 onLineTokenUrl 是远程生产环境中用于获取 token 值的一个 controller 的 action ,用来为本地开发提供 token 值

这个方案的大致逻辑就是:
1:只让生产环境的公众号去统一请求微信公众号的 token 值
2:其它任何地方,只是去获取生产环境下公众号请求到的这个 token ,达成一个共享的态势

看一下 jfinal weixin 官方配置:
https://gitee.com/jfinal/jfinal-weixin/blob/master/src/main/java/com/jfinal/weixin/demo/WeixinConfig.java

注意看里头被注掉的这行代码是关键:
ApiConfigKit.setAccessTokenCache(new LocalTestTokenCache(onLineTokenUrl));

2020-04-02 21:56

方式一是在用 sql 模板 Db.template(...)

而方式二的 columndao.find(...) 的参数是要传入具体的 sql , 而不能传入 sql 的 id

2020-04-02 21:54

@苦丁香 具体什么时候 removeSharedObject ,得看你什么时候需要,不要限定在 onStart 这个地方

思路再放宽些

2020-04-02 21:53

@sliver 能想到是这个原因相当不错,赞

2020-04-02 17:48

What are you talking about?

2020-04-02 17:45

可能是在 linux 下扫描文件失败

项目打包后在本地开发机器上跑一下,不要在 eclipse/IDEA 里头跑,要用启动脚本来跑

检查一下异常是什么

2020-04-01 17:39

@xiuj 直接用就好,不一定非要有集成这个动作

具体的办法是在 jfinal 的 onStart 方法中初始化一下 quartz,然后直接用上

2020-04-01 17:38

@Code_Cat 1.8 都好多年历史了,比 1.7 肯定是要稳定得多

升级 JDK 其实就是解压 JDK 1.8, 然后在环境变量的配置中改个目录而已,不能再简单方便了

而且 jdk 1.8 的性能比 1.7 要好很多

2020-04-01 17:37

这个分享很实用,日志按日期划分便于查看与管理,将来写脚本来分析也很方便

2020-04-01 17:36

估计你的 _layout.html 中全是一些 #define 定义的函数,但没有在任何地方调用过它们,自然就不显示任何东西了

函数的定义与调用是两回事,定义不会触发调用

你的代码 render _layout.html , 一般不会这么用, _layout.html 一般是让 #include 进来,或者 engine.addSharedFunction(...) 进来的

你没有给出任何 _layout.html 中的东西,只能帮你猜到这里了

以后如果你问问题还是需要让人去猜你在说什么的话,建议不要再问了,遵重回答者

2020-04-01 17:30

@杜福忠 他是在类里头写的,不是在方法里头写的,必然出错了

2020-04-01 17:30

enjoy 模板的热加载是自动的,与编译啥的都无关

java 代码的热加载,如果在 IDEA 之下,可以安装一个 jrebel 插件

2020-04-01 17:23

@杜福忠 这个方法可以的

还有一个办法是:
engine.removeSharedObject("siteinfo");
engine.addSharedObject("siteinfo", Siteinfo.dao.findFirst("select * from siteinfo");

较新的 jfinal 版本添加了 Engine.removeSharedObject 方法,便于动态调整共享变量

2020-04-01 17:20

@xheeex https://jfinal.com/share/2023 这个地方明明是错误的,而且肯定也不是官方的例子,官方的例子都在文档之中:
https://jfinal.com/doc