2020-07-26 15:04

这个是因为 jfinal 的 devMode = true 时,会向控制台输出请求参数,而你的 base64 这个参数很长,System.out.print(...) 输出很耗时,所以才出现你碰到的情况

解决办法:
1:关闭 devMode, 配置一下 me.setDevMode(false); 即可

2:高版本的 jfinal 限定了参数打印的长度,可以升级到高版本,在这里可以看到参数限定输出长度:
https://gitee.com/jfinal/jfinal/blob/master/src/main/java/com/jfinal/core/ActionReporter.java

2020-07-25 17:54

@錢勢惘導 我看了一下,改成 byte[] 模式以后没有满足你的需求,由于你的回复太晚了,为了保险起见改回原来的老版本了,因为昨天要发布新版本 4.9.01

其实 jfinal 的 redis plugin 是可以通过继承扩展的,大致如下:
public class MyCache extends Cache {
public Long hgetCounter(Object key, Object field) {
// 在此覆盖掉父类中的 hgetCounter 方法,实现自己想要的功能
}

然后配置一下:
Redis.addCache(new MyCache());

在使用的时候就能用上自己的实现类了,建议你通过这种方式来扩展使用

2020-07-25 17:08

后续补充, 新版本 jfinal 4.9.01 已经将上述方案添加进来,可以升级到该版本解决问题,注意仍然需要在 nignx 中添加配置才能支持,配置方法如下:
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;

具体原因见本贴前面详细的回复

2020-07-25 17:08

后续补充, 新版本 jfinal 4.9.01 已经将上述方案添加进来,可以升级到该版本解决问题,注意仍然需要在 nignx 中添加配置才能支持,配置方法如下:
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;

具体原因见本贴前面详细的回复

2020-07-25 14:37

@ivanant jfinal 4.9.01 新增了这个配置,可以直接升级到这个版本使用,超爽的

2020-07-25 14:36

@spKevin jfinal 4.9.01 这个版本已经改进了算法,对于 sql 压缩支持更好,配置方法:
activeRecordPlugin.getEngine().setCompressorOn(' ');

2020-07-25 13:18

@大大咧咧 jfinal 4.9.01 已发布到 maven 中心库, renderQrCode 没法改了

不过我在本地跟踪过 renderQrCode,内部已经有 flush() , 所以应该是没问题的

你那里出问题我感觉很奇怪,所以,还请验证一下你扩展一下 QrCodeRender,然后添加一个 flush() ,核心代码如下:

OutputStream os = response.getOutputStream();
// 经测试 200 X 200 大小的二维码使用 "png" 格式只有 412B,而 "jpg" 却达到 15KB
MatrixToImageWriter.writeToStream(bitMatrix, "png", os); // format: "jpg"、"png"
os.flush();

也即原有的 MatrixToImageWriter.writeToStream(...) 使用 os 参数,前后各添加一行代码

2020-07-24 21:44

renderQrCode(...) 的这么来测试:
public void index() {
renderQrCode("test");
}

然后启动项目,在浏览器里面直接访问上面的 action 即可测试

2020-07-24 21:43

@大大咧咧 还得麻烦你再多试几个,尤其是 renderQrCode("abc")

这个是输出二维码的,很重要

2020-07-24 21:36

@大大咧咧 幸好你提出来了,正要发布新版本 jfinal 4.9.01 到 maven 中心库,你迟一点就晚来一步了 ^_^

2020-07-24 19:44

这个涉及到比较繁琐的细节,建议加入俱乐部,除了 jfinal.com 官网源代码以外,我再给你一套极简的微信支付源码

2020-07-24 16:53

@大大咧咧 感谢支持

由于 TextRender 已添加了 flush(), 所以我现在最关心的是 TemplateRender 是否有此问题

希望你能在你出问题的机器上进行这个测试,如果 TemplateRender 也有问题,那就也要添加

有可能与电脑也有关系,要在你出问题的那台电脑上测试

2020-07-24 15:31

这里还有个问题需要你来帮助一下

在你当前的开发环境下,碰到了 TextRender 需要 writer.flush() 才有返回的情况

那么你再用一下 TemplateRender,看看这个工作是否正常,因为这个也是没有 outputStream.flush() 的

再告知一下你运行使用的容器,是 tomcat、jetty 还是 jfinal undertow,版本是多少,这有助于打磨 jfinal 自身

2020-07-24 15:29

@Dirge 连启动脚本为啥不用一个 bin 子目录来放也是有考虑的,你可以思考一下这里头的好处

2020-07-24 14:59

这个应该是与其它 Render 的 OutputStream.flush() 一起注掉的,主要是因为跟踪到 tomcat、jetty 容器底层,发现它们本身就有一个 flush()

所以 jfinal 中减少一次 flush() 可以提升性能

而 TextRender 面对的是 Writer 而非 OutputStream,或许有些底层容器并没有及时 flush()

请问你用的哪个容器,是不是 undertow? 我还得看看它的源码

此外,由于这个地方不能非分百保障所有容器都及时 flush,所以 jfinal 也只是先注释,并没有删掉这行代码

刚刚已经去除了注释:
https://gitee.com/jfinal/jfinal/commit/ae0c988bc3387981ceb62ebe36abf85d920828b6