2020-09-11 10:16

要知道,业务有可能被很多地方调用,而要保障所有地方调用时都记得用上拦截器,这个是容易出问题的

所以,我所有项目全部在业务方法内用的 :
Db.tx () -> {
这里是数据库操作
});

2020-09-11 10:15

上面的用法不仅代码简单,而且可以在内部使用 try catch 灵活控制。 还可以避免你的业务在用到别的场景时忘了开启拦截器

2020-09-11 10:14

开启事务,我建议这么来用:
Db.tx () -> {
这里是数据库操作
});

2020-09-11 10:14

用 Aop.get(...) 即可,文档中都有

2020-09-11 10:13

Model 没有提供复制方法,如果你的 Model 中都是一些 Integer、String、Double、Date 等等之类的基本类型是可以直接使用 setter 方法实现复制功能的,因为这些基本类型不允许修改,是共享安全的

如果你的 Model 有还有 Map、List 等之类的有结构的属性,就需要自己写复制方法

2020-09-11 10:09

你的网站点击几次就自动创建了很多 cookie, 而且 cookie 的域名是 baidu.com 以及 hm.baidu.com

异常提示是不能超过 200 个 cookie,随着时间的推移,cookie 数量会不断增加,你为啥要用这么多 cookie ?

如下是我随手复制的你网站产生的 cookie:



DRCVFR[dG2JNJb_ajR] mk3SLVN4HKm .baidu.com / Session 31 Medium HMVT 64ecd82404c51e03dc91cb9e8c025574|1599745820| .hm.baidu.com / Session 48 Medium __yjsv5_shitong 1.0_7_09060afb5ce9ef23d8ae8f48ec71e0079e23_300_1599745819959_175.0.57.242_ecc6cfb9 .baidu.com / 2020-09-12T13:50:19.000Z 97 Medium PSINO 7 .baidu.com / Session 6 Medium BDRCVFR[S4-dAuiWMmn] I67x6TjHwwYf0 .baidu.com / Session 33 Medium BDRCVFR[fb3VbsUruOn] rJZwba6_rOCfAF9pywd .baidu.com / Session 39 Medium ZD_ENTRY baidu .baidu.com / Session 13 Medium H_BDCLCKID_SF JRkOVI0-tIvDqTrP-trf5DCShUFsK-viB2Q-XPoO3KOoenkCK4PaLU0JXhrO--biWbRM2MbgylRp8P3y0bb2DUA1y4vpWjKDQ2TxoUJ23UokORQsqqQtqqkebPRiJPb9Qg-qahQ7tt5W8ncFbT7l5hKpbt-q0x-jLTnhVn0MBCK0MD09e5tKD5PVKgTa54cbb4o2WbCQWxnh8pcN2b5oQTtebU4qbt4D0a732PTybb3vOIJTXpOUWfAkXpJvQnJjt2JxaqRCBDLaSp5jDh3MQhDpyxjrelohHGby0hvctn3cShPCyUjrDRLbXU6BK5vPbNcZ0l8K3l02V-bIe-t2XjQhjHtOqT-Htn3aQ5rtKRTffjrnhPF3WMRbXP6-hnjy3b7y0bkK-JAaEp5dXbrW5P-UyN3MWh3RymJ42-39LPO2hpRjyxv4X65L3PoxJpOJ3NrZaJQ1HxjtKfnvbURvD--g3-AqBM5dtjTO2bc_5KnlfMQ_bf--QfbQ0hOhqP-jBRIE_C0yfI0KhKvPKITD-tFO5eT22-us-57l2hcHMPoosIOvbP4-K4RLLPb3WncObKviaKJjBMbUoqRHXnJi0btQDPvxBf7pBJFD-h5TtUJMsMo_y4jdqq_EqJ7yKMnitIv9-pPKWhQrh459XP68bTkA5bjZKxtq3mkjbPbDfn028DKuDjLKD5b3DaRf-b-XbIOyLb5VHJOoDDv6hxbcy4LdjG5x0nOJHRvHbKJn3RndVtb4DxRvblFS3-AqKjJGaKFq-t3tKCD2VqAl2JQkQfbQ0hOhqP-jW5IL-Dok3R7JOpvshfnxyb8UQRPH-Rv92DQMVU52QqcqEIQHQT3m5-5bbN3ut6T2-DA__C-MtD3P .baidu.com / Session 889 Medium BDORZ B490B5EBF6F3CD402E515D22BCDA1598 .baidu.com / 2020-09-12T02:04:55.880Z 37 Medium delPer 0 .baidu.com / Session 7 Medium BDSFRCVID wnCOJeC62GDpt-7rS0CEhLQtr2KKfYcTH6f3Bof6Vwba10QO1yqJEG0Ptf8g0Ku-V2NEogKKLmOTHpKF_2uxOjjg8UtVJeC6EG0Ptf8g0M5 .baidu.com / Session 116 Medium H_PS_PSSID 7540_32606_1437_7546_31660_7611_7625_32117_26350 .baidu.com / Session 58 Medium MCITY -158%3A .baidu.com / 2050-09-10T02:30:04.154Z 12 Medium BIDUPSID 6AEF3EE8528CF9CCAEFCF7A57A4D150E .baidu.com / 2052-07-08T16:22:28.000Z 40 Medium PSTM 1594916429 .baidu.com / 2088-08-03T19:34:36.936Z 14 Medium BAIDUID E12E761325CB6E7A226E2D12E62B1674:SL=0:NR=10:FG=1 .baidu.com / 2050-07-23T13:29:12.000Z 55 Medium HMACCOUNT_BFESS DBF41E2E1085D592 .hm.baidu.com / 2038-01-18T00:00:00.743Z 31 ✓ None Medium HMACCOUNT DBF41E2E1085D592 .hm.baidu.com / 2038-01-18T00:00:00.743Z 25 Medium
mk3SLVN4HKm

2020-09-11 09:51

SpringServletContainerInitializer 是否需要一个注册机制? 例如像 Servlet 一样在 web.xml 中的注册

2020-09-10 17:12

获取方式是 : getFile() 或者 getFiles()

你用的是哪个版本 jfinal ?

2020-09-10 11:47

@李通 "解决办法是开发基于 JVM 的动态语言",这个并不是在解决 JVM 的热加载,是另一种动态语言

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 的东东,显然不如这个方案好