2020-11-10 22:11

@qsyan 如果你真的仔细看过 jfinal 源代码,你就会知道 jfinal 与 spring 完全是两个世界,完全是两种不同的设计

再告诉你一个事实, jfinal 是 2011 年就存在的,开源是在 2012 年 3 月 18 日,这里有记录:
https://www.oschina.net/p/jfinal

而 spring boot 是 2014 年左右才出生,也就是说 jfinal 比 spring boot 早出生将近 3 年,jfinal 顶层设计 10 年不变

从这个出生的时间先后次序,你应该可以接受 jfinal 并不是 spring boot 的轮子。 倒是 spring boot 很多用法跟 jfinal 早期的设计很像

例如抛弃 xml, 简化配置, 约定大于配置, 谁是轮子,相信你有个新的认知

2020-11-10 22:00

@qsyan 应该是小编误点了,抱歉

有关是不是造轮子的事情,还请说得更详细一些

有时候确实是造轮子,有时候造的轮子会更好用

jfinal 的功能十分丰富,但代码量只有 3 万行,比 spring 少了十倍不止,如果如你所说是造轮子,应该也是一个更轻量更简单的轮子,有很多人还是很喜欢这样的轮子的

2020-11-10 21:52

看异常是缺少依赖:
java.lang.NoClassDefFoundError: org/apache/calcite/schema/Table

这个异常一般是缺包,或者是其版本不对,应该是与 jfinal 无关的

2020-11-10 17:09

PathScanner 是极简设计,一共才 177 行代码:
https://gitee.com/jfinal/jfinal/blob/master/src/main/java/com/jfinal/core/PathScanner.java

2020-11-10 17:08

@琴海森林 用上官方的 PathScanner, 改造一下你的扫描代码就可以了,很方便的

2020-11-10 17:07

写一个拦截器,用一个 ThreadLocal 传递, spring boot 本质上也是在 RequestContextHolder 通过 ThreadLocal 传递的

大致代码如下:
public class RequestContextHolder implemetns Interceptor {
static ThreadLocal《Request》 TL = new ThreadLocal();
public void intercept(Invocation inv) {
TL.set(inv.getController().getRequest());
inv.invoke();
}

public static Request getRequest() {
return inv.getRequest();
}
}

然后配置为全局拦截器:
configHandler(Handlers me) {
me.add(new RequestContextHolder());
}

用的时候这样:
RequestContextHolder.getRequest().getAttribute(...);

2020-11-10 17:02

@琴海森林 你这么一说,倒真是可以的,主要是因为现在的扫描方案性能极高

不过现在已经了自动生成功能,再扫描的话必要性就低了

要知道 Model 的自动生成功能有一个重要的点就是生成 baseModel, 这个可以快速响应数据库的变动

只要是生成 baseModel 的需求存在, 那么顺便生成一下 model 与 tabel 的映射也就可以了

2020-11-10 17:00

@天晴 这个只在开发环境下支持,生产环境不支持

java 是静态语言,要做到你说的需求很不容易,多年以前阿里就做过这样的尝试,最后失败了

2020-11-10 16:19

用 sql 批量修改更方便:
String sql = "update ... set ... where id in (" + StrKit.join(id, ",") + ")";
Db.update(sql);

2020-11-10 16:09

在 undertow.txt 中添加配置就好:
undertow.ssl.protocol = TLSv1

具体的实现代码在这里:
https://gitee.com/jfinal/jfinal-undertow/blob/master/src/main/java/com/jfinal/server/undertow/ssl/SslConfig.java

从代码中可以看出来, 还有很多 ssl 参数是可以通过参数指定的

jfinal 官方出的东西,虽然很多都不写入文档, 但功能已提前做好了。随着你开发的深入,会发现好多功能是现成的

这是因为 jfinal 的极简设计,做到了 "少即是多"

2020-11-10 16:06

@天晴 现在就是动态扫描的

2020-11-10 12:10

@琴海森林 社区所有资源全改成了路由扫描的用法,下载试用啊,超爽的

routes 级拦截器、baseViewPath 这些功能都还在是很爽的

还有一个爽点就是扫描速度极快,根本不比手动添加路由慢

2020-11-10 12:01

@琴海森林 功能一直是这样的, @ActionKey 顾名思义, 就是 action 的 key,这个 key 是会覆盖 controllerPath 配置的

否则应该改名叫 methodKey

jfinal 4.9.03 这个版本还新增了一个 controllerPath 共享功能,也就是多个 Controller 可以映射为同样的 controllerPath, 这个功能可以大大减少对 @ActionKey 的使用需求

2020-11-10 11:50

@琴海森林 @ActionKey 的功能没有被影响,你再试试