18

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

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

4 回答 4

17

您首先需要创建一个可以构建到 .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 项目一样构建战争并将其部署到您的服务器。

于 2014-03-06T15:56:32.790 回答
8

在这里您可以找到有关部署的信息: 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 表达式用于路由器。):

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");
        });
    }
}

具有此配置的应用程序适用于tomcatglassfish服务器。

于 2016-10-25T06:30:29.763 回答
3

对于独立场景,您可以只使用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 buildapp.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将其拉到您的服务器,然后再运行它。

于 2017-04-28T22:18:47.090 回答
1

1) Clone this repo: https://github.com/simplesteph/ec2-masterclass-sampleapp

2) Navigate to project pom.xml directory

3) mvn clean install

4) go to target folder

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

6) In browser, navigate to http://localhost:4567

于 2019-01-20T19:38:50.877 回答