Запуск встроенного сервера Jetty в качестве фонового процесса

У меня есть приложение Spring, и я использовал Tomcat для его разработки и запуска на сервере. Меня очень разочаровал процесс разработки deploy->undeploy-->deploy снова-->.., поэтому я решил переключиться на встроенный Jetty. Итак, теперь у меня есть только один класс Java, который отвечает за запуск моего сервера:

public class MainServer {

private Server start() throws Exception {
    Server jetty = new Server();
    String[] configFiles = { "WebContent/WEB-INF/jetty.xml" };
    for (String configFile : configFiles) {
        XmlConfiguration configuration = new XmlConfiguration(new File(configFile).toURI().toURL());
        configuration.configure(jetty);
    }

    WebAppContext appContext = new WebAppContext();
    File warPath = new File("WebContent");
    appContext.setWar(warPath.getAbsolutePath());
    appContext.setClassLoader(Thread.currentThread().getContextClassLoader());
    appContext.setContextPath("/4d");
    HandlerList handlers = new HandlerList();
    handlers.setHandlers(new Handler[] { appContext, new DefaultHandler() });
    jetty.setHandler(handlers);

    jetty.start();
    jetty.join();
    return jetty;
}

public static void main(String[] args) {
    try {
        new MainServer().start();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

Это идеально подходит для разработки, поскольку позволяет выполнять горячую замену и кажется более быстрым. Однако я также хотел бы позже развернуть этот параметр на своем сервере. Как лучше всего запустить этот сервер и запустить его в фоновом режиме (например, Tomcat startup.sh)? Как мне назвать этот класс MainServer?


person semonte    schedule 25.07.2011    source источник
comment
Итак, в итоге я отказался от самостоятельного запуска сервера с помощью кода и вместо этого настроил Maven для обработки всей моей упаковки и сборки. Так что, по крайней мере, теперь развертывание приложения на производственном сервере не так болезненно. Я мог бы изучить этот nohup позже, так как об этом уже есть довольно много тем.   -  person semonte    schedule 27.07.2011


Ответы (2)


Вы упомянули startup.sh, поэтому я полагаю, что ваш сервер похож на unix. Затем рассмотрите возможность использования команды nohup:

nohup java [options] MainServer > nohup.out &
person Sergey Aslanov    schedule 25.07.2011

Я рекомендую написать сценарий инициализации (ищите /etc/init.d/skeleton в качестве отправной точки), используя старт-стоп-демон. Переход на стандарт занимает некоторое время, но окупается позже.

Мы используем встроенные сценарии причала и инициализации уже много лет. Он никогда не подводил нас.

person sfussenegger    schedule 25.07.2011