背景介绍
jfinal是一个很棒的框架,做一些中小型的网站完全够用,使用jfinal-undertow开发web程序,简直不要太简单,可以让你专注于自己的业务逻辑,不用为很多轮子的问题困扰。
但是我在实际使用中遇到一个问题,就是程序部署在用户的电脑上,这个电脑是日常要用的,而不是部署在服务器上,用户系统都是Windows的,程序用maven打包后,以启动脚本的方式运行起来(比如start.bat),很容易被关掉。
我想了两个解决办法,一个是用tomcat容器,缺点是不能用undertow了,而且还增加了很多配置操作,还要安装配置tomcat。一个是能不能将程序做成Windows服务?经过一番搜索和尝试,果然找到了一种很简洁的办法,感觉比使用tomcat的性价比要高。
方法
- 下载WinSW.NET4.exe 并改成你自己的项目名称,比如: club.exe。放到已经打包好的程序的根目录下
- 创建与项目同名的xml文件,内容参照以下格式,启动类名的地方改成你自己的:
<configuration>
<id>club</id>
<name>jfinal club</name>
<description>jfinal club</description>
<executable>java</executable>
<logmode>rotate</logmode>
<env name="MAIN_CLASS" value="com.your.company.config"/>
<env name="JAVA_OPTS" value="-Xms256m -Xmx1024m"/>
<env name="APP_BASE_PATH" value="%BASE%" />
<env name="CP" value="%APP_BASE_PATH%\config;%APP_BASE_PATH%\lib\*" />
<arguments>-Xverify:none %JAVA_OPTS% -cp %CP% %MAIN_CLASS%</arguments>
<stopparentprocessfirst>true</stopparentprocessfirst>
</configuration>
- 以管理员身份运行cmd,并进入到项目文件夹。
注册服务:club install
移除服务:club uninstall
运行服务:net start club
停止服务:net stop club
- 如果上面步骤都运行成功了,到这一步,去windows服务里面就能看到
jfinal club
这个服务了。 - 我自己还遇到一个问题,如果你的程序在启动时用到了数据库连接,就可能遇到开机启动时程序这个服务先于数据库服务启动,导致程序启动失败的问题。这个问题的解决办法是把你的服务设置一下延迟启动,右键服务名称->属性->常规,设置延迟启动