2017-03-13 17:27
@天涯刀 异常提示仍然是同一个问题
最简的解决办法是将线程给搞成 deamon 的,方法很简单,在 new Thread 的时候,传入一个 true 参数即可
其它解决方案,可以是使用一个控制变量,使线程可以完全退出。回到具体的两个问题:
1:tomcat 不是在启动的时候判断,而是在 shutdown 的时候判断是否有线程没有退出
2:要看你的监听事件的事处理方式,例如,是不是在同一个线程中处理的,如果是独立的线程之中,那么 tomcat 线程继续它自己的 shutdown 线程,而其它非 deamon 线程的停止动作还未完成,那么这个异常仍然会出现
2017-03-13 17:03
@hotsmile 扩展一下 Log 这个抽象类,然后实现 ILogFactory 接口,假定叫:MyLogFactory,最后通过 me.setLogFactory(new MyLogFactory())
参考已有的 JdkLog 实现非常容易写
2017-03-13 16:50
configEngine 中通常只需要使用 me.addSharedFuntion("xxx.html") 就可以了,该方法只有一个功能,就是将 xxx.html 中所有使用 #define 指令定义的“模板函数”添加为共享的模板函数
所谓共享地的模板函数是指,你在任何模板中都可以直接调用这些模板函数,如果你不使用 me.addSharedFunction(...) 来配置,那么想要调用这些模板函数,必须先使用 #include("xxx.html") 将之引入到当前模板之中,才可以调用
从你的问答中看出你并未理解 template function,不要把问题想复杂了,只需要注意如下几点:
1:将 me.addSharedFunction(xxx.html) 理解为在具体的模板中使用 #include(xxx.html) 添加所有 #define 指令定义的函数
2:使用 #define 定义的模板函数,可以想象成为 java 语言中定义的方法,方法有名称,有参数,方法之间可以互相调用
jfinal 模板引擎最重要的功能就是模板函数的定义与调用。其它的事情建议不要多想,再想很可能就想多了
2017-03-13 15:36
@Oliver springcloud 比 dubbo 要复杂很多,而且 spring cloud 与spring 的很多其它模块都有依赖关系,选择 spring cloud 方案,意味着你同时要学习 spring 的其它一些知识,因此学习成本会高出很多
建议使用 dubbo + jfinal 方案,已经有很多成功案例了
2017-03-13 10:34
截图中的红色关闭按钮是强制关闭 java 虚拟机,而 jetty、tomcat 的关闭并非指直接关闭虚拟机,而是向 jetty、tomcat 关送一个关闭信号,让其自己去关闭虚拟机
因此,beforeJFinalStop() 这个方法,会在 jetty、tomcat 正常关闭流程之下被回调,例如 tomcat 下回调它用一下 shutdown.sh、shutdown.bat 这两个可执行文件
而对于 eclipse 下面的开发情况之下,在修改了文件并保存后,jfinal 会 reload 一次 webapp,此时也会执行 beforeJFinalStop() 回调,在此方法中设置一个断点便知