只需两个文件让jfinal项目成为windows上的服务

1. 下载WinSW.NET4.exe 并改成你自己的项目名称,如: club.exe

2. 创建项目名.xml,如: club.xml,复制并修改以代码:

<configuration>
  <id>club</id>
  <name>jfinal club</name>
  <description>jfinal club</description>
  <executable>jfinal.bat</executable>
  <logmode>rotate</logmode>
  <startargument>start</startargument>
  <stopargument>stop</stopargument>
</configuration>

最后的结构如下图2.png

3. 以管理员运行cmd,并进入到项目文件夹。

注册服务:

club install

移除服务

club uninstall

运行服务

net start club

停止服务

net stop club

完成,收工。

4. xml另一种写法,不需要jfinal.bat

<configuration>
  <id>club</id>
  <name>jfinal club</name>
  <description>jfinal club</description>
  <executable>java</executable>
  <logmode>rotate</logmode>
  <env name="MAIN_CLASS" value="com.mypackage.Application"/>
  <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>

5.  存在问题

第一种配置文件写法,start 是没问题的。stop 也能停止项目,但是jfinal 好像没有正常停止,因为 onStop() 没有执行。路过的大神如果知道的话还请指点。

ps. 经评论里网友提点,无法正常停止是因为java变成windows服务时 jps 获取不到 pid。

经修改第二种配置文件正常,推荐使用。


ps. 这种方法也不仅可以注册java为服务,其它可运行程序也可以,如nginx. 具体请看:https://github.com/kohsuke/winsw

评论区

JFinal

2019-03-30 14:57

这是目前最简洁的让 jfinal 项目成为 windows 服务的方法了,点赞加收藏是必须的

感谢你的分享

Sohnny

2019-03-30 17:56

不用服务的话,可以把启动脚本直接放到启动文件夹中应该就行了

lyh061619

2019-03-31 20:19

如果能搞一个像php在windows集成运行环境就更拉风了,php那个在windows确实很方便,他把php,mysql等等全都集成到一块上去了。这个做得不错:http://phpstudy.php.cn/download.html虽说主打php产品,但他们有做过一个java的产品一键集成安装环境

zhc

2019-04-02 14:02

有个问题,这样的话是不是使用jps命令看不到java的虚拟机,也就没法监控了把

flyinkeke

2019-04-02 14:29

@zhc 现在用的mac试不了。不过,最终还是执行的java命令不会看不到吧。

zhc

2019-04-02 15:04

@flyinkeke 我使用的Apache Commons Daemon将也是讲jfinal打成了win服务,但是使用jps,jmap 等命令是找不到的

zhc

2019-04-02 15:07

@flyinkeke 使用jmap+pid是可以的,jps是不行的

flyinkeke

2019-04-02 15:41

@zhc 刚找了台win试了下,jps命令确实看不到

zhc

2019-04-02 15:54

@flyinkeke 这样虽然部署方便但是对于后面问题查找会有影响,不知道有没有解决方案

JJfinal

2019-04-03 15:53

FBear

2019-04-15 18:52

SrvanyUI 这个可以直接将bat注册成系统服务。图形化操作,也比较简单,选中bat填写信息确定就ok了。

逍遥一生

2019-04-18 14:06

windows上直接将bat文件注册成服务 随服务器自动启动即可 无需弄成exe再去调用bat或运行class

pipi

2019-05-15 10:52

还有别的办法吗?

flyinkeke

2019-05-15 12:02

@pipi 上边的方法用起来有什么不妥吗?

pipi

2019-05-20 16:39

@flyinkeke 以前命令行能看到的请求以及sql内容 改成服务了以后在哪查看啊?

flyinkeke

2019-05-20 18:44

@pipi 有log文件夹啊

chatcoco

2019-05-26 23:30

有没有nssm版本的

flyinkeke

2019-05-27 10:17

@chatcoco 没用过,应该大同小异

HingLo

2019-06-13 17:27

我今天测试了一下,两种方案都可以创建成功,但是却始终无法启动服务.

flyinkeke

2019-06-13 19:03

@HingLo 之前在win7和win10上试过,都是可以的。有错误日志,你看一下

HingLo

2019-06-17 16:40

@flyinkeke
这是启动信息:
scjrb 服务正在启动 .
scjrb 服务无法启动。
服务没有报告任何错误。
请键入 NET HELPMSG 3534 以获得更多的帮助。
如下是日志信息:
2019-06-14 07:30:19,084 INFO - Starting ServiceWrapper in the service mode
2019-06-14 07:30:19,204 INFO - Starting java -Xverify:none -Xms256m -Xmx1024m -cp D:\scjrb\config;D:\scjrb\lib\* com.fcsgroup.ScjrbApplication
2019-06-14 07:30:19,214 INFO - Starting java -Xverify:none -Xms256m -Xmx1024m -cp D:\scjrb\config;D:\scjrb\lib\* com.fcsgroup.ScjrbApplication
2019-06-14 07:30:19,334 DEBUG - Completed. Exit code is 0
都看不出具体错误,我就很费解了.请问你能看出什么?

flyinkeke

2019-06-18 10:45

@HingLo 是以管理员身份运行的吗?jfinal的日志有显示什么什么错误吗?

l745230

2019-09-04 14:50

最近参数windows开机自动启动服务,遇到个问题,使用xml另一种写法,不需要jfinal.bat. 启动的时候默认是使用jre,导致动态代理报错. 楼主是怎么解决的?在xml中配置使用JDK?@flyinkeke

flyinkeke

2019-09-05 16:00

@l745230 要么配置JDK,要么照如下设置试试
ProxyManager.me().setProxyFactory(new CglibProxyFactory());
CglibProxyFactory 对 cglib-nodep 有依赖,需要添加依赖,弄成 provided 为 test 即可

l745230

2019-09-06 11:50

@flyinkeke 多个地方部署,不想因为windows开机自启服务,而配置成cglib,影响其他地方. 没试出来xml的写法,怎么用上JDK

热门分享

扫码入社