2018-12-25 18:00

@lyq027 这个配置还有一个巨大的好处,部署环境通常会生成一些上传文件之类的一些动态变化的数据,而你的开发环境中是没有这些数据的

这时,将这些动态内容额外配置到项目之外的目录之下,在部署的时候就不用考虑挪动或覆盖这类目录的问题了

例如项目中的 src/main/webapp/upload 这个目录是存放上传文件的,你可以将这个文件挪到项目之外,例如挪到:
/var/my-project/upload

然后配置一下:
undertow.resourcePath = /var/my-project/upload, webapp, src/main/webapp

2018-12-25 17:57

单步调试一下确定问题,估计是模板中的 field 取值表达式触发了对 getUser 的调用,逐步触发的一个过程

2018-12-25 17:43

@Dreamlu 很久不见,忙啥去了?

2018-12-25 17:25

建议内容改成代码形式便于 copy 使用,贴图片不能复制使用,jfinal 社区的发贴功能在工具栏里头有 "代码语言" 这个下拉列表框,选择 Java 语言,再将 xml 、html 或者 java 代码粘贴过来即可,十分方便

感谢分享

2018-12-25 17:22

级联的数据放在 Model 中的一个 getXxx 方法中,然后在这个方法内部再用一次 find(...) 进行查询,这个天然就是延迟加载

2018-12-25 16:46

配置:undertow.resourcePath 即可

可配置多个,用逗号分隔,例如:
undertow.resourcePath=webapp, /var/www/my-proj, /var/www/upload

配置成多个时,如果目录不存在,jfinal undertow 会默认帮你跳过, 所以为了兼顾开发环境与部署环境,可以配置多个

2018-12-25 14:56

用浏览器发请求,然后按一下查看一下在浏览器里面生成的 html 代码是什么样的,主要看一下 value 值生成出来没有,如果没有生成,再看一下表达式中的 #(x) 是否有值,如果有值,再看一下 #(x.image_type) 是否有值

估计是你的 field 表达式没用好,看一下这里的文档:
https://www.jfinal.com/doc/6-3

注意看第二小节的:属性访问

2018-12-25 14:39

分布式事务是一个比较麻烦的事情, jfinal 一度出过几个实现方案,但过于复杂,对性能也有影响,所以一直没上这个功能

这类事情还是如楼主所做的交给第三方中间件为好,如 ShardingSphere。

对于绝大部分互联网项目,做一做数据库的读写分离,一主多从就足够用了,更大的业务再拆分数据库为多数据库

感谢分享,点赞 + 收藏

2018-12-25 14:35

@sourceTT 你那里具体解决的代码能贴出来不? 确保 jfinal 3.6 对这里的改进是万无一失的,谢谢你的贡献

2018-12-25 14:32

@l30961171
me.setBaseTemplatePath(null);
me.setToClassPathSourceFactory();

上面两行代码,让引擎去 class path 以及 jar 包之中去找文件内容,十分方便
尤其对打入到 jar 包中发布的资源非常有用

2018-12-25 14:30

生成的 Model ,大家是有可能在里面手动添加代码的,所以生成器在生成的时候不能覆盖,否则会被骂死

而 BaseModel、MappingKit 这类生成的文件是全交给生成器维护的,可以覆盖

2018-12-25 11:21

etag 仅仅是写个 header 变量而已,在拦截器中这样来用就好:
inv.getController().getResponse().setHeader("ETag", value);

在 jfinal 之下功能好实现,关键在于这个 ETag 值的生成,这个你得去看看 http 协议的文档

最后,ETag 一般用于对静态文件的设置,而拦截器之中全是对动态请求的拦截,所以你应该在 Handler 中来设置 ETag,大致代码如下:
response.setHeader("ETag", value);

2018-12-24 23:02

这个分享极好,因为这个场景十分重要,也是第一次有人分享这个主题,赞一个

再一个,既然你都 jfinal 集成 dubbo,好多同学都想知道如何做的呢,能否上一个 jfinal + dubbo 的集成分享啊?

不用太多内容,贴点主要的代码出来就好,谢谢

2018-12-24 23:00

@tuxming @快乐的蹦豆子 现成的功能,一行代码的事:
activeRecordPlugin.setContainerFactory(new OrderedFieldContainerFactory());

2018-12-24 20:17

用 InterceptorStack 进行合并