JFinal.start("WebRoot", 80, "/", 5);
这种启动方式之前简单用过,最近稍微深入研究了下,得出了以下心得。
即便不以debug方式启动,以run方式启动,代码也会自动更新的。
之所以能免去手动重启,是因为onchange事件帮大家对WebAppContext进行了重启,唯一不一样的是帮大家留住了session。这种原理对于一些大一点项目或者启动很慢的项目不是很理想,因为我稍微改个东西,整个项目就要重启一遍,真的很不爽。而且大项目经常会内存溢出。相比之下,感觉使用tomcat容器debug启动项目更理想一些,因为这种模式下,只要不是新增类或者修改继承,修改已经存在的类也是不需要重启的,而且他的原理并不是重启整个项目。
看了下JettyServer的源代码,经过测试,去掉changeClassLoader方法以及onchange的时候不指定classLoader,都不影响正常使用。(onchange的时候为什么不直接复用changeClassLoader呢)
changeClassLoader 确实可以重用在 onchage 中,这个或许是当时这个方法是后来新增的,没注意到可以重用
jfinal 3.5 会尝试种不用 restart webapp 的方法来支持热加载,让开发体验更平滑