发生异常后,如何在java中重新生成thrift服务器?

发生异常后,如何在java中重新生成thrift服务器?,java,process,thrift,Java,Process,Thrift,我是java新手,已经用java编写了一个小型但相当重要的节俭服务 我注意到,有时它会停止服务而没有任何错误消息;java进程似乎只是随机死亡,没有堆栈跟踪或异常 确保此过程即使在发生错误后仍然有效的最佳方法是什么?以下是主要功能,如果有帮助的话: public static void main(String [] args) { try { MyAppServiceHandler handler = new MyAppServiceHandler();

我是java新手,已经用java编写了一个小型但相当重要的节俭服务

我注意到,有时它会停止服务而没有任何错误消息;java进程似乎只是随机死亡,没有堆栈跟踪或异常

确保此过程即使在发生错误后仍然有效的最佳方法是什么?以下是主要功能,如果有帮助的话:

public static void main(String [] args) {
    try {
        MyAppServiceHandler handler = new MyAppServiceHandler();
        MyApp.Processor processor = new MyApp.Processor(handler);
        TServerTransport serverTransport = new TServerSocket(8080);
        TServer server = null;
        server = new TSimpleServer(processor, serverTransport);
        System.out.println("Starting thrift server...");
        server.serve();
    }
    catch (TTransportException e) {
        e.printStackTrace();
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}

如果呼叫服务被阻塞,您可以执行以下操作:

public static void main(String [] args) {
   while(true){
    try {
        MyAppServiceHandler handler = new MyAppServiceHandler();
        MyApp.Processor processor = new MyApp.Processor(handler);
        TServerTransport serverTransport = new TServerSocket(8080);
        TServer server = null;
        server = new TSimpleServer(processor, serverTransport);
        System.out.println("Starting thrift server...");
        server.serve();
    }
    catch (TTransportException e) {
        e.printStackTrace();
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    //do cleanup
  }
}

我换了一个更好的解决方案

java中我的
main
函数如下所示:

public static void main(String [] args) {
    try {
      MyAppServiceHandler handler = new MyAppServiceHandler();
      MyApp.Processor processor = new MyApp.Processor(handler);
      TServerTransport serverTransport = new TServerSocket(8080);
      TServer server = null;
      server = new TSimpleServer(processor, serverTransport);
      System.out.println("Starting thrift server...");
      server.serve();
    }
    catch (TTransportException e) {
      e.printStackTrace();
    }
    catch (Exception e) {
      e.printStackTrace();
    }
}

这会导致服务器死亡,这与我希望从原始解决方案中得到的结果背道而驰。但是,java进程/服务器现在已启动,它将监视进程并在进程死亡时重新启动,而原始解决方案(使用while循环)将使服务器保持活动状态,但如果连接到端口时出现问题,将打印堆栈跟踪,这些错误消息将丢失。

您遇到了什么异常,在你的代码的哪一部分?我没有看到任何异常,这就是我问的原因。这是一个无头系统,服务连续运行,错误是零星的,因此没有太多的反馈。