grizzly http server should keep running

后端 未结 3 604
有刺的猬
有刺的猬 2020-12-29 10:49

Below is the code to start Grizzly Http Server. If I press any key the server stops. Is there any way to keep it alive.

Jetty has join() method, which will not exit

相关标签:
3条回答
  • 2020-12-29 11:18

    I use a shutdown hook. Here's a code example:

    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);
        }
    }
    
    }
    
    0 讨论(0)
  • 2020-12-29 11:18

    The server stops because you call the httpServer.stop() method after the input stream. When the execution reachs the System.in.read(); it hangs till you enter a letter and then moves on to the server stop.

    You can just comment httpServer.stop() because that code example is exactly to hang up the server when a key is pressed.

    But if you want to create a Webserver instance I would suggest that you run a Thread in main() that starts an instance of the Grizzly Webserver.

    0 讨论(0)
  • 2020-12-29 11:25

    Try something like:

        try {
            server.start();
            Thread.currentThread().join();
        } catch (Exception ioe) {
            System.err.println(ioe);
        } finally {
            try {
                server.stop();
            } catch (IOException ioe) {
                System.err.println(ioe);
            }
        }
    
    0 讨论(0)
提交回复
热议问题