Сервер grizzly http должен продолжать работать

Ниже приведен код запуска 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();

        }

В соответствии с приведенным выше кодом, если вы нажмете любую клавишу, сервер остановится. Я хочу, чтобы он работал. Я убью процесс, когда захочу остановить сервер. Основной метод не должен заканчиваться.

Спасибо

Ответ 1

Я использую крюк остановки. Вот пример кода:

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);
    }
}

}

Ответ 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);
        }
    }

Ответ 3

Сервер останавливается, потому что вы вызываете метод httpServer.stop() после входного потока. Когда выполнение достигает System.in.read();, оно зависает, пока вы не введете письмо, а затем перейдете к остановке сервера.

Вы можете просто прокомментировать httpServer.stop(), потому что этот пример кода - это точно, чтобы повесить сервер при нажатии клавиши.

Но если вы хотите создать экземпляр Webserver, я предлагаю вам запустить Thread в main(), который запускает экземпляр веб-сервера Grizzly.