启动嵌入式Jetty服务器作为后台进程

时间:2011-07-25 07:33:34

标签: java embedded-jetty

我有一个Spring应用程序,并使用Tomcat开发它并在服务器上运行它。我对deploy-> undeploy - >再次部署 - > ..开发过程感到非常沮丧,所以我决定切换到嵌入式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();
    }
}

}

这非常适合开发,因为它允许hotswapping并且似乎更快。但是,我还想稍后将此设置部署到我的服务器上。启动此服务器并在后台运行它的最佳方法是什么(如Tomcat startup.sh)?我该如何调用此MainServer类?

2 个答案:

答案 0 :(得分:2)

你提到了startup.sh,所以我想你的服务器就像unix一样。然后考虑使用nohup命令:

nohup java [options] MainServer > nohup.out &

答案 1 :(得分:1)

我建议使用start-stop-daemon编写一个initscript(以/etc/init.d/skeleton作为起点)。使用标准需要一些时间,但以后会有所回报。

我们多年来一直在使用嵌入式jetty和init脚本。它永远不会让我们失望。