java - 创建一个可停止的java程序(守护进程)

标签 java

启动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/

相关文章:

java - JTable:显示包含列表的数据

java - Struts 2 使用 # 语法访问操作标签属性

Java包命名。下划线 : A special case

java - 部署 Java applet 的 Rolls-Royce 方法是什么?

java - 如何将 TextView 放在 Button 前面

java - 匹配正值或负值的正则表达式模式(例如 "1.2"、 "-2.8"、 "7.8"、 -22.8")

java - OSGi如何安装两个相同的包?

java - 了解 AWS 开发工具包 Java 2.x(异步与同步)HTTP 客户端

java - 如何使用 DropBox 和 Eclipse for Java 避免找不到主类和类定义错误

java - 类型参数 FooEntity 隐藏了 FooEntity 类型