解决 jfinal 3.5 版本之前engine为 devMode时在 linux 文件句柄不能及时关闭问题

     jfinal 3.5 版本之前,如果 engine 工作在 devMode = true 模式下,ClassPathSource 中的 url.openConnection() 这行代码会打开一个文件句柄,而且关闭不及时,在高并发下可能引起 linux 打开文件句柄过多的问题。

    检查项目中是否受影响:

1:配置过 engine.setToClassPathSourceFactory()

2:配置过 engine.setSourceFactory(new ClassPathSourceFactory())


解决办法如下:

1:下载 MyClassPathSource、MyClassPathSourceFactory 两个文件

https://pan.baidu.com/s/1yOudl-qqDBkrHKXd06WqUA

 

2: 将所有对 engine 配置 ClassPathSourceFactory 的地方改成配置成 MyClassPathSourceFactory,例如:

    arp.getEngine().setSourceFactory(new ClassPathSourceFactory());

    改成:

    arp.getEngine().setSourceFactory(new MyClassPathSourceFactory());


    未配置 ClassPathSourceFactory 的不受影响。engine 配置为 setDevMode(false) 的也不受影响。

    jfinal 3.5 版本已经改进了这里,强烈建议升级到 jfinal 最新版本。



评论区

二当家的

2018-07-04 17:56

最好提供一个可以上传源码文件的功能,这样子写好的Demo可以直接上传

Miaomiao

2018-07-05 23:09

devmode默认是false吗

JFinal

2018-07-05 23:30

@Miaomiao 默认是 false, 但注意一下,如果在 configConstant(Constants me) 中配置了 me.setDevMode(true) 会对模板引擎以及 sql 管理的引擎起作用

houkyle

2018-07-06 11:26

感谢大神

JFinal

2018-07-06 13:48

@houkyle 后面升级到 jfinal 3.5 以后,这些代码可以删掉

Irin.Chan

2018-07-17 13:58

意思是devMode = false 不影响吗?

JFinal

2018-07-17 14:07

匿名用户

2018-09-05 19:52

me.setDevMode(false) 似乎并没有起作用啊

JFinal

2018-09-05 22:07

@匿名用户 me.setDevMode(false) 这个设置以后只会打开固定的几个文件,系统关闭时会关闭这几个文件

如果没有设置的话,打开文件的数量是一直上升的

糊搞

2018-10-03 20:39

@JFinal 3.5什么时候能正式推出呀!!!

JFinal

2018-10-03 20:43

@糊搞 国庆过完第一天就发布

糊搞

2018-10-04 00:51

@JFinal 强!!!