2013-11-05 39 views
17

我用Spark Web框架來創建一個webapp,但我不知道如何部署這個webapp。我很抱歉,如果這是很基本的,但我是新來的火花框架和我無法找到引導我如何部署web應用程序的火花:如何部署一個Spark Java Web應用程序?

  • 如何部署web應用程序火花獨立的任何文件
  • 如何構建一個spark webapp(對war文件或這樣的文件)並用web服務器(jetty或Tomcat)進行部署。

回答

15

您首先需要創建一個可以內置到.war文件一個普通的Java項目(Eclipse中,這將是一個動態Web項目)

在此鏈接火花文檔描述了需要什麼被添加到您的項目web.xml文件。 http://sparkjava.com/documentation.html#other-webserver

過濾器中文檔中列出的參數值需要指向您定義路由的類。

此外,以前在main()中的所有代碼都需要移至init()。另外,爲了讓我把它部署到JBoss,我只需要包含spark庫而不是Jetty庫。完成此操作後,您應該能夠像構建其他Java項目一樣構建戰爭並將其部署到您的服務器。

+0

你如何過濾Jetty以免被包含在WAR中? – voddan

5

這裏找到有關部署的信息: http://sparkjava.com/documentation.html#embedded-web-server

拳重要的是,爲web.xml配置設置過濾器選項:

<web-app> 
    <!-- some options --> 
    <filter> 
    <filter-name>SparkFilter</filter-name> 
    <filter-class>spark.servlet.SparkFilter</filter-class> 
    <init-param> 
     <param-name>applicationClass</param-name> 
     <param-value>your.package.Application</param-value> 
    </init-param> 
    </filter> 

    <filter-mapping> 
    <filter-name>SparkFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 
</web-app> 

Application類應實現的接口spark.servlet.SparkApplication,並有以初始化路線init()方法。

這一個看起來像是爲(在Java SE 8,你可以使用Lambda Expression的路由器。):

package your.package; 

import static spark.Spark.*; 

public class Application implements SparkApplication { 
    @Override 
    public void init() { 
     get("/", (request, response) -> "Hello World"); 

     get("/hello/:name", (request, response) -> { 
      return "Hello: " + request.params(":name"); 
     }); 
    } 
} 

應用程序與此配置tomcat的的GlassFish服務器工作正常。

1

對於獨立場景,您可以使用Gradle(或Maven)創建胖(意爲擁有包括嵌入式Jetty服務器的所有依賴項),可執行jar文件。下面是一個簡單build.gradle文件做到了這一點:

apply plugin: 'java' 
apply plugin: 'application' 

// TODO Change this to your class with your main method 
mainClassName = "my.app.Main" 

defaultTasks 'run' 

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile group: 'com.sparkjava', name: 'spark-core', version: '2.5.5' 
    // TODO add more dependencies here... 
} 

// Create a fat executable jar 
jar { 
    manifest { 
     attributes "Main-Class": "$mainClassName" 
    } 

    from { 
     configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } 
    } 

    archiveName "app.jar" 
} 

通過gradle build構建你在命令行中的應用。這將創建一個app.jar文件在您build/libs文件夾,然後只需運行:

java -jar build/libs/app.jar 

如果你想成爲真正的最新的:)那麼你必須使用Docker打包你的JRE和應用程序JAR,因此你是不是取決於安裝在服務器上的軟件堆棧。要做到這一點,我們可以用一個Dockerfile

FROM java:8 

ADD build/libs/app.jar/

EXPOSE 4567 
ENTRYPOINT ["java", "-jar", "app.jar"] 

構建泊塢窗圖像並運行它,比如:

docker build -t myapp:v1 . 
docker run --rm --name myapp -p 4567:4567 myapp:v1 

當然,如果你想使用遠程web服務器上的碼頭工人的形象,你需要將其推送到Docker Hub或私人碼頭存儲庫,並使用docker pull將其拉到您的服務器上,然後再運行它。

+0

Docker bundle並不是我想到的,但我喜歡它! –