Сервер 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.