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

时间:2018-04-25 12:30:20

标签: java

启动java命令行应用程序很简单,只需在命令提示符中(在应用程序所在的目录中)编写以下行。

java myApp.java

但是,要以正确的方式停止应用程序,以确保清除所有非托管资源(以及在停止之前必须完成的任何操作),需要自定义代码。

该应用程序将在debian系统中运行,没有GUI作为守护程序(它将在后台运行)。

下面我写下代码的骨架。

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运行并且不会停止,直到您不能停止它为止。 杀死进程(正如有些人的建议)不是一个好的解决方案,因为(例如)某些非托管资源可能无法正确清理。

我需要一个能够改变布尔变量的代码" stop"来自 OUTSIDE

最好的解决方案是使用类似于start命令的命令停止应用程序的解决方案,请参阅下面的伪代码(在命令提示符中,在myApp.java所在的目录中执行)。

myApp.java stop=true

但是如果它不可能,那么第二个选择是使用另一个java命令行应用程序,它会停止myApp.java,这样我就可以使用以下代码停止myApp.java

java stopMyApp.java

有人能够建议一个有用的代码示例吗?

1 个答案:

答案 0 :(得分:1)

您可以使用包含一个单词的文本文件。你的程序每x秒读取一次,并根据该字自动停止。

您可以手动或使用您可以随时运行的其他程序更改文件文本内容。

更好的是,当文件发生变化时,您可以使用WatchService API(Java 7)或VFS API from Apache Commons收到通知。

如果您使用数据库,则可以使用它而不是普通文件。