2020-12-24 15:46
@java填坑分 jfinal 源码只有 3 万行,里头没有 factoryBean 字眼,肯定是不会出这个异常的
你那里出现了 factoryBean 字眼,证明肯定是 jfinal 之外的因素,例如你的项目中同时用到了 spring ,而 spring 抛出了 factoryBean 有关的异常
2020-12-24 15:32
扫描代码很简单,一共才一百多行 java 代码:
https://gitee.com/jfinal/jfinal/blob/master/src/main/java/com/jfinal/core/PathScanner.java
只关注 @Path 注解,其它一概跳过,所以,绝对不可能出现 factoryBean 这种字眼
2020-12-24 14:52
@_imlzw_ undertow.devMode = false; 不影响其它功能的开发体验,不支持热部署
2020-12-24 12:21
初衷是为了开发体验的流畅,新增类、方法等动作不用去手动重启服务
由于采用的是 class loader 方案,所以不可能做到彻底。jrebel 这类专门性的热加载第三方花了很大的规模与复杂度才做得更完善,但仍然不彻底
无法做彻底的根本原因是 java 是静态类型语言
你谈到的下面的内容:
而我经常只是修改类方法内容,编译,浏览器查看变更结果。要实现这个功能,只需要debug模式运行Application.main即可实现。
其实可以通过一个简单的配置就可以了:
undertow.devMode = false;
所以说,有没有这个功能,对于不需要的同学来说,关掉它就可以了,不影响原有习惯,也不影响习惯使用 jrebel 的同学继续使用 jrebel
2020-12-23 11:42
@mr_wangyan 这个问题其实是 jfinal 之外的事情,但为了帮你省时间,jfinal 还是添加了点代码,解决了这个问题
这个问题的原因如下:
1:使用 nginx 代理 https 也就是 443 端口
2:nginx 与 jfinal 项目通信的通道并不是 443 端口,而是像你项目中用到的 1888 类似的其它端口
3:当你在 jfinal 中使用 rendirect(url) 做重定向的时候, jfinal 获取到的端口号必然只能是 1888,因为 nginx 与之通信的确用的是 1888
4:所以说 443 这个端口号对于 jfinal 项目来说是透明的,无法感知的
5:解决办法自然就出来了,通过在 nginx 中配置 proxy_set_header X-Forwarded-Port $server_port; 将 443 这个端口号通过 http 的 header 中传递过去
6:最终 jfinal 的 RediectRender 优先获取一下 X-Forwarded-Port 的值,如果获取到,那么重定向就优先使用该端口