我使用Spark Web框架创建了一个Web应用程序,但不知道如何部署这个Web应用程序。很抱歉如果这很基础,但我是新手,找不到任何指导我如何部署Spark Web应用程序的文件。
- 如何独立部署Spark Web应用程序
- 如何构建Spark Web应用程序(到war文件或类似文件)并与Web服务器(jetty或Tomcat)一起部署。
我使用Spark Web框架创建了一个Web应用程序,但不知道如何部署这个Web应用程序。很抱歉如果这很基础,但我是新手,找不到任何指导我如何部署Spark Web应用程序的文件。
首先需要创建一个普通的Java项目,可以构建成.war文件(在Eclipse中,这将是一个动态Web项目)。
此链接中的Spark文档描述了需要添加到项目web.xml文件中的内容:http://sparkjava.com/documentation.html#other-webserver
文档中列出的filter内的param-value需要指向您定义路由的类所在的位置。
另外,之前在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 项目一样构建 war 文件并将其部署到服务器上。
在这里,您可以找到有关部署的信息: 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");
});
}
}
这种配置的应用程序在 tomcat 和 glassfish 服务器上都可以良好运行。
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
构建您的应用程序。这将在build/libs
文件夹中创建一个app.jar
文件,然后只需运行:
java -jar build/libs/app.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
docker pull
命令将其拉取到服务器上,然后再运行它。1)克隆这个repo: 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