根据 apache commons 文档(https://commons.apache.org/proper/commons-daemon/jsvc.html),我应该能够直接使用 jsvc 将我的应用程序作为守护程序运行,而无需实现 Daemon 类:
直接地
编写一个实现以下方法的类(MyClass):
- void init(String[] arguments):这里打开配置文件,创建跟踪文件,创建ServerSockets,Threads
- void start():启动线程,接受传入连接
- void stop():通知线程终止run(),关闭ServerSockets
- void destroy(): 销毁在 init() 中创建的任何对象
将其存储在 jarfile 中并按上述方式使用:
./jsvc -cp my.jar MyClass
MyClass 实现了上述方法,并没有实现 Daemon 类。但是,如果我尝试像上面那样调用 jsvc 而不在我的类路径中包含 commons-daemon.jar,
我收到以下错误:
Cannot find the daemon loader org/apache/commons/daemon/support/DaemonLoader
java_init failed
如果我将它包含在类路径中,一切正常。,即
./jsvc -cp commons-daemon.jar:my.jar MyClass
我对文档的理解是,如果我不使用该库中的任何内容,我不需要包含 commons-daemon.jar,而只需在我的类上直接调用 jsvc 并实现所需的方法。这是不正确的吗?我不想在我的包裹中捆绑任何不必要的罐子。