2011-07-25 113 views
2

我有一個Spring應用程序,並使用Tomcat開發它並在服務器上運行它。我非常沮喪的部署 - >取消部署 - >再次部署 - > ..開發過程中,所以我決定切換到嵌入式Jetty。所以基本上現在我只是一個單一的Java類,這是負責啓動在我的服務器:啓動嵌入式Jetty服務器作爲後臺進程

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類?

+0

好的,所以我最終做的就是放棄通過代碼自己啓動服務器,而是設置Maven來處理我的所有包裝和構建。所以至少現在將應用程序部署到生產服務器並不是那麼痛苦。我可能會在後面看看那個nohup,因爲已經有很多話題了。 – semonte

回答

2

你提到了startup.sh,所以我想你的服務器是unix的。然後考慮使用nohup命令:

nohup java [options] MainServer > nohup.out & 
1

我建議寫一個啓動腳本(找/etc/init.d/skeleton爲起點)使用start-stop-daemon。採用這個標準需要一些時間,但後來會有所收穫。

我們現在使用嵌入式jetty和init腳本已有多年。它從來沒有讓我們失望。

相關問題