如何关闭嵌入式 Undertow 应用程序?

Posted

技术标签:

【中文标题】如何关闭嵌入式 Undertow 应用程序?【英文标题】:How do you shutdown an embedded Undertow application? 【发布时间】:2016-01-30 12:05:31 【问题描述】:

在Undertow documentation中,下面的例子被呈现为一个非常简单的服务器:

public class HelloWorldServer 

    public static void main(final String[] args) 
        Undertow server = Undertow.builder()
                .addHttpListener(8080, "localhost")
                .setHandler(new HttpHandler() 
                    @Override
                    public void handleRequest(final HttpServerExchange exchange) throws Exception 
                        exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
                        exchange.getResponseSender().send("Hello World");
                    
                ).build();
        server.start();
    

此服务器如何关闭?有一个server.stop() 方法可能会优雅地关闭服务器,但在此示例中没有使用它。是否应该有与调用server.stop() 方法的运行时关联的关闭挂钩?

【问题讨论】:

是的,如果您想优雅地关闭服务器,则必须调用 server.stop() 方法,否则它将继续运行直到被中断。 【参考方案1】:

server.start() 是一个阻塞操作。

如果您在不同的线程中启动服务器,您可以从主线程调用server.stop()。例如:

new Thread(() ->  server.start(); ).start();
System.out.print("Server started. Press 'Enter' to stop...");
System.in.read();
server.stop();
System.out.println("Server stopped.");

【讨论】:

以上是关于如何关闭嵌入式 Undertow 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

javax.faces.context.FacesContextFactory 使用 JSF 应用程序嵌入 Undertow 时出现异常

如何在 Undertow 嵌入式服务器中登录文件?

为嵌入的 Undertow 设置默认编码

Undertow:使用现有的 Servlet 实例

禁用 undertow 日志记录

在 AWS ELB 后面带有嵌入式 Undertow 的 Spring Boot - HTTP 到 HTTPS 重定向