启动java命令行应用程序很容易,您只需在命令提示符中(在应用程序所在的目录中)编写以下行即可。
java myApp.java
但是,要以正确的方式停止应用程序,以便确保清除所有非托管资源(以及必须在停止之前完成的任何操作),需要自定义代码。
该应用程序将在没有 GUI 作为守护程序的 debian 系统中运行(它将在后台运行)。
下面我编写了代码的框架。
public class MainClass {
public static void main(String[] args) throws Exception {
boolean stop = false;
while(!stop){
doSomething();
}
stop();
}
private static void doSomething(){
//Main code of app here
}
private static void stop(){
beforeStop();
System.exit(0);
}
private static void beforeStop(){
clean();
//Code to do anything you have to do before stop
}
private static void clean(){
//Code to clean unmanaged resources
}
}
如您所见,该应用程序将 24/24 运行,并且在您不停止之前不会停止。 终止进程(正如某些人建议的那样)并不是一个好的解决方案,因为(例如)某些非托管资源可能无法正确清理。
我需要一个代码,可以从OUTSIDE更改 boolean 变量“stop”。
最好的解决方案是使用类似于启动命令的命令来停止应用程序,请参阅下面的伪代码(在命令提示符下执行,在 myApp.java 所在的目录中)。
myApp.java stop=true
但如果不可能,第二个选择是使用另一个 java 命令行应用程序来停止 myApp.java,以便我可以使用以下代码停止 myApp.java
java stopMyApp.java
有人可以建议一个有用的代码示例吗?
最佳答案
您可以使用包含一个单词的文本文件。您的程序每 x 秒读取一次,并根据该单词自动停止。
您可以手动更改文件文本内容,也可以使用其他可以随时运行的程序来更改文件文本内容。
更好的是,您可以使用 WatchService API (Java 7) 或 VFS API from Apache Commons文件更改时收到通知。
如果您使用数据库,则可以使用它而不是普通文件。
关于java - 创建一个可停止的java程序(守护进程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50022425/