Стартиране на вграден Jetty сървър като фонов процес

Имам приложение Spring и използвах Tomcat, за да го разработя и стартирам на сървъра. Бях доста разочарован от процеса на разработка deploy->undeploy-->deploy again-->.., така че реших да премина към вграден 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

Препоръчвам да напишете initscript (потърсете /etc/init.d/skeleton като отправна точка), като използвате start-stop-daemon. Преминаването към стандарта отнема известно време, но се отплаща по-късно.

Ние използваме вградени jetty и init скриптове от години. Никога не ни е разочаровало.

person sfussenegger    schedule 25.07.2011