如何部署一个火花Java Web应用程序?
我使用spark web框架来创建webapp,但我不知道如何部署这个webapp。 我很抱歉,如果这是非常基本的,但我是新的引发框架,我找不到任何文件,指导我如何部署一个火花webapp:
- 如何独立部署spark webapp
- 如何构建spark webapp(war文件或此类文件)并使用Web服务器(jetty或Tomcat)进行部署。
您首先需要创建一个可以构建到.war文件中的常规Java项目(在Eclipse中,这将是一个动态Web项目)
此链接中的spark文档描述了需要添加到项目web.xml文件的内容。 http://sparkjava.com/documentation.html#other-webserver
filter中文档中列出的参数值需要指向已定义路径的类。
此外,以前在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项目一样。
在这里,您可以找到有关部署的信息: http : //sparkjava.com/documentation.html#embedded-web-server
首先,为web.xml
配置设置filter选项:
SparkFilter spark.servlet.SparkFilter applicationClass your.package.Application SparkFilter /*
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服务器。
对于独立方案,您可以使用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
在命令行上构建您的应用程序。 这将在build/libs
文件夹中创建一个app.jar
文件,然后运行:
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
其拉到服务器。