2020-09-10 10:56

最后的最后,由于 jfinal 的热加载是通过重启项目(不是重启 JVM) 实现的,所以比起通过修改字节码方案的热加载要可靠简洁很多

与其它大厂的热加载不同,jfinal 热加载理论上可以用于生产环境,热加载过程会有短暂地停服,好在 jfinal 热加载是秒级的

2020-09-10 10:53

这个是 jfinal 提供的,核心代码在这里:
https://gitee.com/jfinal/jfinal-undertow/tree/master/src/main/java/com/jfinal/server/undertow/hotswap

注意,必须要对 java 的 ClassLoader 有深入理解,并且要实际做东西才能理解

为啥强调要实际做东西,这就好比卡中国芯片产业脖子的 "光刻机",全世界知道光刻机的原理,但只有荷兰 ASML 能做出最高端的

最后,由于 java 并不是动态语言,所以它的热加载仅用于开发,不要用于生产环境,历史上有几个大厂做过这方面努力,都失败了

2020-09-09 12:02

@hzh740053757 建议改成 #like(true, user_name, false) 这个设计

2020-09-09 12:01

@JJfinal 你的这个设计符合直觉:#like(true, user_name, false)

2020-09-08 15:57

@hzh740053757 指令执行以后,要么会向 Writer 中输出数据,要么不输出,输出完以后的数据只会展现为字符串形式,是不可能再参与运算的

所以,指令扩展不是这么用的,你可以用表达式来做:
#xxx( Ag - Cu )

多看看文档中的多种扩展方式,都很方便

2020-09-08 15:52

这种整合方式,不必修改 jfinal-undertow 项目,非常好

以前一些同学是改掉 jfinal-undertow 项目中的 JFinalFilter 换成 spring 的东东,显然不如这个方案好

2020-09-08 14:06

这个问题关键在于你的需求,不知道你要实现啥功能,所以也就无从回答

2020-09-07 19:36

必然可以

jfinal 是 web + orm + aop + template engine 框架,在其中可以直接使用任何第三方,不一定需要一个整合动作

正确的做法是,分别学会使用 jfinal 与 hystrix,然后用上即可

2020-09-07 19:34

这个需要自己添加代码来实现, undertow 在生产环境下不支持动态加载 class 文件

当然,你可以去除生产环境这个判断,让其也支持

只不过,要实现你的需求,我建议采用别的方案,例如通过扩展类加载器实现动态功能

还有一个比较简单的方案是通过 enjoy 模板引擎来调用,因为 enjoy 支持动态热加载模板内容

enjoy 模板中可以很方便与 java 互动调用各种功能,文档中有说明

2020-09-06 12:54

这个分享不错,开发可播放背景音乐的站点很有用,点赞 + 收藏

2020-09-05 19:20

@__ 你的表达式是每 5 分钟调度一次,应该是可以的,如果不行,改成下面的试试:
0-59/5 * * * *

也就是说,将第一个 * 号改成指定确切的时间范围


文档中有如下说明:

常见错误:cron4j在表达式中使用除号指定增加幅度时与linux稍有不同。例如在linux中表达式 10/3 * * * * 的含义是从第10分钟开始,每隔三分钟调度一次,而在cron4j中需要使用 10-59/3 * * * * 来表达。避免这个常见错误的技巧是:当需要使用除号指定增加幅度时,始终指定其范围。

基于上面的技巧,每隔2分钟调度一次的表达式为:0-59/2 * * * * 或者 */2 * * * * , 而不能是0/2 * * * *

2020-09-05 19:17

最后,以控制台输出的异常信息来排错

2020-09-05 19:17

先要建好序列:
CREATE SEQUENCE SEQ_AID002
INCREMENT BY 1
MINVALUE 1
MAXVALUE 9999999999999999
START WITH 1
CACHE 20;

此外,这种是 oracle 的用法,注意方言要配置好

2020-09-04 16:29

不知道你如何用的,或许你用的是 jsp、freemarker 等模板

2020-09-04 16:28

看一下调用栈,看是哪里停下来了,jfinal 的 aop 是支持循环依赖的,当前无法确定你碰到的问题