14

下面是启动 Grizzly Http Server 的代码。如果我按任何键,服务器就会停止。有什么办法让它活着。

Jetty 有 join() 方法,不会退出主程序。灰熊中是否也有类似的东西。

public static void main(String args){



ResourceConfig rc = new PackagesResourceConfig("com.test.resources");

        HttpServer httpServer = GrizzlyServerFactory.createHttpServer(BASE_URI, rc);
        logger.info(String.format("Jersey app started with WADL available at "
                        + "%sapplication.wadl\nTry out %shelloworld\nHit enter to stop it...",
                        BASE_URI, BASE_URI));

        System.in.read();
        httpServer.stop();

        }

根据上面的代码,如果您按下任何键,服务器就会停止。我想让它继续运行。当我真正想停止服务器时,我会终止该进程。main 方法不应终止。

谢谢

4

3 回答 3

26

我使用关机钩子。这是一个代码示例:

public class ExampleServer {
private static final Logger logger = LoggerFactory
        .getLogger(ExampleServer.class);

public static void main(String[] args) throws IOException {
    new Server().doMain(args);
}

public void doMain(String[] args) throws IOException {
    logger.info("Initiliazing Grizzly server..");
    // set REST services packages
    ResourceConfig resourceConfig = new PackagesResourceConfig(
            "pt.lighthouselabs.services");

    // instantiate server
    final HttpServer server = GrizzlyServerFactory.createHttpServer(
            "http://localhost:8080", resourceConfig);

    // register shutdown hook
    Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
        @Override
        public void run() {
            logger.info("Stopping server..");
            server.stop();
        }
    }, "shutdownHook"));

    // run
    try {
        server.start();
        logger.info("Press CTRL^C to exit..");
        Thread.currentThread().join();
    } catch (Exception e) {
        logger.error(
                "There was an error while starting Grizzly HTTP server.", e);
    }
}

}
于 2013-03-13T16:31:35.077 回答
2

尝试类似:

    try {
        server.start();
        Thread.currentThread().join();
    } catch (Exception ioe) {
        System.err.println(ioe);
    } finally {
        try {
            server.stop();
        } catch (IOException ioe) {
            System.err.println(ioe);
        }
    }
于 2013-01-28T19:10:18.473 回答
1

服务器停止,因为您httpServer.stop()在输入流之后调用该方法。当执行到达时,System.in.read();它会挂起,直到您输入一个字母,然后移动到服务器停止。

您可以只发表评论httpServer.stop(),因为该代码示例正是在按下键时挂断服务器。

但是如果你想创建一个 Webserver 实例,我建议你在 main() 中运行一个 Thread 来启动 Grizzly Webserver 的一个实例。

于 2013-01-28T14:28:51.017 回答