Запуск встроенного сервера Jetty в качестве фонового процесса - PullRequest
2 голосов
/ 25 июля 2011

У меня есть приложение Spring, и я использовал Tomcat для его разработки и запуска на сервере.Я был довольно разочарован процессом развертывания -> отменить развертывание -> развернуть снова -> .., поэтому я решил переключиться на встроенную 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?

Ответы [ 2 ]

2 голосов
/ 25 июля 2011

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

nohup java [options] MainServer > nohup.out &
1 голос
/ 25 июля 2011

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

В течение многих лет мы используем встроенные сценарии Jetty и init. Это никогда не подводило нас.

...