Eclipse Jetty 服务器单实例应用程序
Eclipse Jetty Server Single Instance Application
我已经创建了一个 java SE 应用程序。我导出了一个 运行nable jar,它 运行s 在 linux 机器上。并使用 windows.
上 运行 的相同 jar 创建了 exe 文件
如果我多次 运行 exe,将创建多个实例(在任务管理器中 javaw.exe)我该如何防止这种情况?
我想阻止这种情况。为此,最初我试图检查服务器是否为 运行ning,但我在 static main()
方法中使用它。服务器 class 的 isRunning()
方法是非静态的。
我需要 运行 windows 和 linux os 上的应用程序。
代码:
public static void main(String[] args) {
try {
if(Server.isRunning()){ // compilation error
}
Server server = new Server();
ServerConnector connector = new ServerConnector(server);
connector.setPort(8080);
server.addConnector(connector);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
server.setHandler(context);
// Initialize javax.websocket layer
ServerContainer wscontainer = WebSocketServerContainerInitializer.configureContext(context);
// Add WebSocket endpoint to javax.websocket layer
wscontainer.addEndpoint(EventSocket.class);
server.start();
server.dump(System.err);
server.join();
} catch (Throwable t) {
logger.error("Server Error : " + t.getMessage(), t);
}
}
您创建单实例服务器应用程序的目标应该非常简单。你可以相信你不能绑定到端口 8080 两次。至少在 Linux 上是这样的。 :)
这意味着 server.start();
可能会因一些有意义的异常而失败 - 您捕获它并终止应用程序。这应该发生在所有其他实例上,直到端口被释放。
当然,有一些方法可以本地创建单实例应用程序(EXE 包装器应该有一个选项,等等)但在这里我会使用端口锁定。
我已经创建了一个 java SE 应用程序。我导出了一个 运行nable jar,它 运行s 在 linux 机器上。并使用 windows.
上 运行 的相同 jar 创建了 exe 文件如果我多次 运行 exe,将创建多个实例(在任务管理器中 javaw.exe)我该如何防止这种情况?
我想阻止这种情况。为此,最初我试图检查服务器是否为 运行ning,但我在 static main()
方法中使用它。服务器 class 的 isRunning()
方法是非静态的。
我需要 运行 windows 和 linux os 上的应用程序。
代码:
public static void main(String[] args) {
try {
if(Server.isRunning()){ // compilation error
}
Server server = new Server();
ServerConnector connector = new ServerConnector(server);
connector.setPort(8080);
server.addConnector(connector);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
server.setHandler(context);
// Initialize javax.websocket layer
ServerContainer wscontainer = WebSocketServerContainerInitializer.configureContext(context);
// Add WebSocket endpoint to javax.websocket layer
wscontainer.addEndpoint(EventSocket.class);
server.start();
server.dump(System.err);
server.join();
} catch (Throwable t) {
logger.error("Server Error : " + t.getMessage(), t);
}
}
您创建单实例服务器应用程序的目标应该非常简单。你可以相信你不能绑定到端口 8080 两次。至少在 Linux 上是这样的。 :)
这意味着 server.start();
可能会因一些有意义的异常而失败 - 您捕获它并终止应用程序。这应该发生在所有其他实例上,直到端口被释放。
当然,有一些方法可以本地创建单实例应用程序(EXE 包装器应该有一个选项,等等)但在这里我会使用端口锁定。