Java 如何在Windows上启动服务器应用程序

Java 如何在Windows上启动服务器应用程序,java,service,websocket,java-server,Java,Service,Websocket,Java Server,我创建了一个简单的客户机-服务器应用程序,运行良好。 服务器正在侦听端口,然后启动作业线程。 目前,IDE之外的唯一方法是杀死java.exe以停止服务器。 这两个示例类都非常精简 主要类别: public static void main(String[] args) { MultiThreadedServer server = new MultiThreadedServer(9000); new Thread(server).start(); } 多线程服务器类: public c

我创建了一个简单的客户机-服务器应用程序,运行良好。 服务器正在侦听端口,然后启动作业线程。 目前,IDE之外的唯一方法是杀死java.exe以停止服务器。 这两个示例类都非常精简

主要类别:

public static void main(String[] args) {
  MultiThreadedServer server = new MultiThreadedServer(9000);
  new Thread(server).start();
}
多线程服务器类:

public class MultiThreadedServer implements Runnable {

  protected int serverPort = 9000;
  protected ServerSocket serverSocket = null;
  protected Thread runningThread = null;
  protected ExecutorService threadPool = Executors.newFixedThreadPool(Options.getInstance().getThreadCount());

  public MultiThreadedServer(int port) {
    this.serverPort = port;
  }

  public void run() {
    synchronized (this) {
      this.runningThread = Thread.currentThread();
    }
    openServerSocket();
    while (true) {
      Socket clientSocket;
      try {
        clientSocket = this.serverSocket.accept();
      } catch (IOException e) {
        throw new RuntimeException("Error accepting client connection", e);
      }

      try {
        this.threadPool.execute(new WorkerRunnable(clientSocket, Constants.appName + " Thread"));
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }

  private void openServerSocket() {
    try {
      this.serverSocket = new ServerSocket(this.serverPort);
    } catch (IOException e) {
      throw new RuntimeException("Cannot open port " + serverPort, e);
    }
  }
}

我想知道,启动服务器应用程序的最佳实践是什么?

我自己解决了这个问题。 我创建了一个windows批处理脚本,它处理一些预先要求并启动服务器应用程序。 使用nssm,我已将此批处理文件安装为windows服务。windows服务无法控制服务器应用程序