毫不夸张的说,我用了最快的速度了,其实还可以更快!!
时间:
2019年1月16日 下午13时
项目:
数据猫教育投资版 (JFinal+微信小程序开发的项目)
真实经历:
上线内测了一周,也做了压测,各方面都比较满意的情况下,今天开始推广,中午十二点开始在各大投资人聚集群里推广小程序端卡片,这样群里投资人可以点卡片直接进入小程序,授权后成为我们的用户。
小程序在这点确实太方便了。
发现BUG:
下午13时到了高峰期,后台看了一下已经800多人了,每分钟都在涨数据,虽然比起其他互联网产品来说 成百上千人不算多,但是这可是精准用户,主要就是服务这些投资人和创业者的。小程序实时访问统计也在激增。
此时,我前端速算模型发现一个bug,后台自定义公式和表单,前端小程序根据配置解析生成表单,填写数据计算公式后,输出结果里百分比格式化居然忘了挪小数点。
一分钟修复完bug,JBolt工具一秒打包,剩下的就是FTP上传,部署,重启了。
但是,此时正是高峰期,正在推广中,怎么能突然重启服务器。团队老大不同意,说重新部署时间太长,等过了高峰期吧。
我说,保证5秒内完成升级。
方法如下:
因为项目使用的服务器是JFinal-Undertow,打包结构针对我这种只修改了后台java代码的情况来说,部署非常方便,只需要到打包出来的目录中找到lib目录下项目对应的Jar-就是整个项目的classes打包成的一个独立jar文件。
我确定,只需要替换线上整个文件就可以了。
替换简单啊,打开WinSCP,可视化,直接找到了线上的文件所在目录,拖进去覆盖就行了,不会影响正在运行的项目本身。
注意:这个替换jar的步骤 要跟重启服务器的指令执行前后不能超过1秒。我需要准备好输入的shell指令后,先快速覆盖Jar文件,后立马回车执行重启命令。
因为目前还是单机部署,用户量小,没必要搞那么大,使用shell 命令 找到undertow部署的根目录
可视化环境里看到的是这样,有个restart.sh 的重启脚本
重要的步骤就是这个了,屏住呼吸,鼠标拖放覆盖后,立马进入命令窗口敲了回车执行 sh restart.sh ,3秒内完成了服务器的重启,搞定!!!
在这四秒钟,我一直开着微信小程序,去下拉刷新数据,因为前端小程序的访问做了timeout:10秒处理设置了,所以并没有出现网络断开或者异常的问题,而且小程序访问不是靠session 而是使用了微信服务器登录,本地服务器记录生成token的方式,所以通讯也没有问题,总之,我4秒内完成了高峰期的部署,确实没出什么问题。
疑问:
读到这里,可能你会问:'平时只修改一个Java文件,直接单独覆盖线上服务器对应的这一个class文件不就行了,如果开着热部署,也能几秒加载完成自动重启啊,就一个覆盖操作搞定了呀!'
是的,没错,但是生产环境不能儿戏,单独替换class文件会遇到很多问题,整体编译打包jar不会环境问题,单独从本地开发环境拷贝一个class文件,如果没编译好,很可能热加载失败,导致项目垮掉。再者,也不建议生产环境开热部署。
总结:
JFinal极速开发+极速部署,真不错,感谢JFinal为开发者所做的努力。
极速开发选JFinal,如果用Eclipse可以安装JBolt加速开发、打包和部署,总之能让你少敲一行、少点几次鼠标,总是值得的。
后记:
这四秒还是我手动操作的,这还不算重新打包,上传等操作消耗的时间,其实,如果 新版JBolt出来,这套流程就可以一键搞定了。
预告:
如果JBolt实现一键创建环境、一键编译打包、一键上传服务器指定目录,按需覆盖文件,按需执行部署和重启脚本,一气呵成,几秒搞定。那真的好爽!
另外:我们正在JFinal学院和JFinal俱乐部里问答和交流,欢迎你来。
JFinal学院:www.jfinalxueyuan.com