最近有个需求,需要将Java的程序在树莓派上部署成服务,就准备使用Java service Wrapper。上网参考了一下别的文章,但是其中也碰到了不少的坑,特记录下来,希望能帮助到别的童鞋。。。
主要的过程可以参考这篇文档,我主要是记录一下这篇文章没有提到的问题
Java Service Wrapper 将Java程序部署成系统服务
-
Java Service Wrapper 版本的问题
Java Service Wrapper 版本分三种,Professional,Standard,Community三个版本,前两个版本是收费的,第三个版本才是免费的。
树莓派是32位系统,CPU的架构是armhf。 -
第三方动态库的配置
在Java开发的过程中,有时候会用到C提供的一些NATIVE接口,这个时候需要C的so动态库。这些动态库需要在wrapper.conf文件中进行配置
#Java Library Path (location of Wrapper.DLL or libwrapper.so)
这个段落中添加第三方so所在的文件夹
wrapper.java.library.path.1=…/lib
wrapper.java.library.path.2=…/src/olami_lib
其中path.1是wrapper自己的lib库的地址。自己的可以在下面继续添加。
- 程序的入口
程序的入口需要配置成自己Java程序的主类
Java Main class,也就是程序入口
#该类需要实现WrapperListener 接口并保证WrapperManager 得到初始化
wrapper.java.mainclass=com.xxx.main
- 程序不断重启
Java服务配置好以后,会发现Java程序会不断的重启。这是因为wrapper会和JVM不断的通信,检查JVM是否或者。如果你的Java程序休眠了或者通信失败了,wrapper就会通知进程挂起,然后再试图重启Java程序。解决办法是在wrapper.conf文件中设置
wrapper.ping.timeout=0
wrapper.startup.timeout=0
这两个值默认是30
参考:https://stackoverflow.com/questions/20718058/java-service-is-restarted-4-or-5-times