如何部署一个火花Java Web应用程序?

时间:2013-11-05 07:17:40

标签: java webserver spark-java

我使用spark web框架创建了一个webapp,但我不知道如何部署这个webapp。我很抱歉,如果这是非常基本的,但我是新手来激发框架,我找不到任何指导我如何部署spark webapp的文档。:

  • 如何独立部署spark webapp
  • 如何构建spark webapp(用于war文件或此类文件)并使用Web服务器(jetty或Tomcat)进行部署。

4 个答案:

答案 0 :(得分:15)

首先需要创建一个可以构建到.war文件中的常规Java项目(在Eclipse中这将是一个动态Web项目)

此链接中的spark文档描述了需要添加到项目web.xml文件的内容。 http://sparkjava.com/documentation.html#other-webserver

过滤器中文档中列出的参数值需要指向您已定义路线的类。

此外,之前在main()中的所有代码都需要移动到init()。

@Override
public void init() {
    get(new Route("/test") {
        @Override
        public Object handle(Request request, Response response) {
            return "response goes here;
        }

    });

另外,为了让我将它部署到JBoss,我只需要包含spark库而不是Jetty库。完成此操作后,您应该能够构建战争并将其部署到服务器,就像使用任何其他Java项目一样。

答案 1 :(得分:7)

在这里您可以找到有关部署的信息: http://sparkjava.com/documentation.html#embedded-web-server

首先,为web.xml config设置过滤器选项:

<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 服务器。

答案 2 :(得分:2)

对于独立方案,您可以使用Gradle(或Maven)来创建fat(意味着包含所有依赖项,包括嵌入式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镜像并运行它,例如:

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

当然,如果您想在远程Web服务器上使用Docker镜像,则需要将其推送到Docker Hub或私有docker存储库并使用docker pull将其拉到您的服务器,之后运行它。

答案 3 :(得分:0)

1)克隆此仓库:https://github.com/simplesteph/ec2-masterclass-sampleapp

2)导航到项目pom.xml目录

3)mvn全新安装

4)转到目标文件夹

5)java -jar ec2-masterclass-sample-app-1.0-jar-with-dependencies.jar

6)在浏览器中,导航到http://localhost:4567