经常由于本地的开发环境和服务器上的生产环境不同,导致项目部署过程中会遇到各种插曲,现在有了jfinal undertow,终于可以摆脱tomcat等各种配置,但是开发环境的JDK和服务器上的JDK版本不一定一致,比如我面临的情况是,开发环境是JDK8,但是生产环境还是JDK6,服务器上有众多依赖于JDK6的项目,还不能轻易更换,以前都是在tomcat中指定JDK版本,现在改用undertow后也想这样,于是在波总的建议下,目前实现方式如下:
将JDK中的jre目录拷贝到项目中来,我是copy到了main目录下,然后在package.xml中增加如下配置
${basedir}/src/main/jre
jre
然后在start.bat文件中增加如下配置,让批处理文件不去系统环境中找JDK而是在指定的位置去找set JAVA_HOME=%APP_BASE_PATH%jre
set path=%APP_BASE_PATH%jre/bin
由于我们的服务器是windows环境,所以需要将批处理文件安装成系统服务,便于维护和管理。最后是找到了一个靠谱的小工具叫 nssm (Non-Sucking Service Manager)非依附式系统服务管理工具,支持图形界面和命令行。仅需将nssm.exe和批处理文件放在同一目录下就可以直接使用了。如:
我目前的安装服务脚本如下:@echo off
rem -------------------------------------------------------------------------
rem
rem 使用说明:
rem
rem 1: 修改service name为你期望在系统服务中显示的名称,本例中为 JfinalTest,共4处需要修改
rem
rem 2: 编写对服务的具体描述信息,即 Description 后面的内容。共一处需要修改
rem
rem -------------------------------------------------------------------------
setlocal & pushd
set APP_BASE_PATH=%~dp0
nssm install JfinalTest %APP_BASE_PATH%start.bat
nssm set JfinalTest AppDirectory %APP_BASE_PATH%
nssm set JfinalTest Description "this is first test for nssm"
nssm start JfinalTest
endlocal & popd
pause
其他删除服务、重启服务、停止服务命令都比较简单,大家可以自行网上找找资料,很多。而且该工具还支持图形界面,也很简单,如下
然后把编写的服务管理的脚本都用maven打包插件在打包时一并copy到部署包中,在服务器上解压后,即可实现一键部署,不用再关心tomcat、不用再关心服务器JDK版本,服务器重启系统也会自动重启,这个小工具还有线程守护,发现服务停掉会自动去尝试重启。是不是很省心。