2025-12-29 11:07

@zeroabc 对了,如果需要ModelBase代码生成器的java.sql.Timestamp不被转为java.util.Date,要在生成器generator.generate(); 前面配置一下 generator.addTypeMapping("java.sql.Timestamp", "java.sql.Timestamp");
注意要移除generator.setTypeMapping(tm);那行demo代码,用默认的对象进行add覆盖即可

2025-12-29 08:57

@zeroabc 我们时间戳一把梭,数字long啊,避免其他国家的用户因为冬夏令时回拨问题导致时间不一致的问题,前后交互上全程使用时间戳就可以了,计算时间冲突也方便

2025-12-28 15:11

@zeroabc Date 就是没有时分秒,保留时分秒的话要用Timestamp,或者是LocalDateTime对象。 Date 和 DateTime是不同的,MySQL老驱动是会保留,MariaDB是严格遵守规则。如果是做老项目兼容处理的话,可自建一个MariaDBDialect,覆写 Save、Update系列方法 e.getValue() 前判断一下Date类型转换为Timestamp就可以了。
我个人是不建议折腾Date类型,直接时间戳一把梭,前后端统一规则更方便。也没啥时区夏令时、冬令时的处理,麻烦的一批

2025-12-18 20:07

如果是专为JFinal打造的话,建议再加一个类:
public class JetCacheDb implements ICache {...
实现接口,并转调一下JetCacheKit即可

使用:
ActiveRecordPlugin arp = new ActiveRecordPlugin(...);
arp.setCache(new JetCacheDb());

效果:
List list = Db.findByCache(cacheName, key, sql);

这样才是“一行接入 arp.setCache(new JetCacheDb())”

2025-12-15 18:32

PS:如果项目服务器资源不能增加的情况,可以试试加一个 j2cache ,防止redis忙不过来

2025-12-15 18:25

调优这种事情,没有服务器配置和业务并发数等详细说明,咋推测哦。。。
根据目前信息:JedisPool 连接数默认是8个,要改配置:
RedisPlugin 》redisPlugin.getJedisPoolConfig().setMaxTotal(100);
注意改太大也没用,得看CPU数量能切换过来不,冒烟压测一下看最优配置是多少

2025-12-07 20:33

Watch~ Star~ Fork~ 三连
https://gitee.com/jfinal/aifei-enjoy

2025-11-21 10:45

@zzutligang 找不到文件,就是baseTemplatePath和fileName参数没设置对了,调试一下就看见了。
建议你们干脆把sql模板全放config目录算了,jar里面别放模板了。有需要修改的时候直接改config目录里面,只有一份文件也不怕找错,JF代码也不用改啥东西。
再说JF启动的sh脚本config 目录在 lib/* 之前,classLoader.getResource(finalFileName)也是优先找config文件了。

2025-11-17 17:44

我们有租户项目是直接把模板内容放到了 数据库,自定义的DbSource,非常适合在线动态管理

2025-11-17 17:40

在模板获取处判断一下就了:
arp.getEngine().setSourceFactory((baseTemplatePath, fileName, encoding) -> {
FileSource fileSource = new FileSource(baseTemplatePath, fileName, encoding);
if (new File(fileSource.getFinalFileName()).exists()){
return fileSource;
}
return new ClassPathSource(baseTemplatePath, fileName, encoding);
});

2025-11-12 15:01

我们是在入库前就处理了,接收json对象时遍历格了一遍

2025-11-12 14:58

https://jfinal.com/doc/6-4
12、#escape 指令
escape 指令用于 html 安全转义输出,可以消除 XSS 攻击。
switch (cur) {
case '<':
w.write("&lt;");
break;
case '>':
w.write("&gt;");
break;
case '"':
w.write("&quot;");
break;
case '\'':
// w.write("&apos;"); // IE 不支持 &apos; 考虑 &#39;
w.write("&#39;");
break;
case '&':
w.write("&amp;");
break;
default:
w.write(str, i, 1);
break;
}

2025-11-05 15:56

@chilun555 对啊,随便反射一个对象共享起来,比如 ParaProcessorController 里面一个index方法, ppc.getDeclaredMethods()[0]

2025-11-05 12:06

创建一个占位和共享的 ParaProcessorController 类对象即可,该类无实际用处,只用于传参占位不报错。
这个是java编程里面常用的解决方式,参数不让用null就创建一个临时对象,需要改造的位置还可以用于对象判断,是否要进行下一步处理之类