我一直在尝试找到一种在 Google AppEngine 上部署Dropwizard应用程序的方法,但到目前为止我还没有找到任何东西。
从这个问题(和答案)来看,我认为这可能是不可能的。我想确定这一点,如果它确实有效,我想学习如何。
有一个名为warwizard的 dropwizard 分支,它显然可以让您从 dropwizard 代码创建 war 文件,但它已经有 6 个多月没有被触及,这可能会使使用 dropwizard 文档变得困难。
我一直在尝试找到一种在 Google AppEngine 上部署Dropwizard应用程序的方法,但到目前为止我还没有找到任何东西。
从这个问题(和答案)来看,我认为这可能是不可能的。我想确定这一点,如果它确实有效,我想学习如何。
有一个名为warwizard的 dropwizard 分支,它显然可以让您从 dropwizard 代码创建 war 文件,但它已经有 6 个多月没有被触及,这可能会使使用 dropwizard 文档变得困难。
Dropwizard 只是将 Jersey+Jackson+Jetty 很好地捆绑在一起。Jetty 和 App Engine 无法相处(也就是说,App Engine 已经在运行 Jetty,因此它不希望应用程序提供自己的)。
您最好使用 Jersey 和 Jackson,而不需要 Dropwizard 将它们捆绑在一起:http ://blog.iparissa.com/googles-app-engine-java/google-app-engine-jax-rs-jersey/和http:/ /www.cowtowncoder.com/blog/archives/2009/11/entry_338.html
但是,您可以在 Google Compute Engine 上运行 Dropwizard。这基本上只是 Google 提供的 linux VM,如果需要可以访问它们的 API。
通过在 GCE 上执行以下操作,我设法让我的 Dropwizard 实例工作:
安装 Java
sudo apt-get install java7-runtime-headless
打开防火墙端口:
gcutil addfirewall rest --description="http" --allowed="tcp:8080
gcutil addfirewall admin --description="admin" --allowed="tcp:8081"
将文件复制到 GCE
gcutil --project={project-id} push {instance-name} {local-file} {remote-target-path}
运行你的应用
java -jar your-app.jar server your-config.yml
编辑:还有另一种称为 wiztowar https://github.com/twilio/wiztowar的替代方案,它仅支持 DW 0.6.2。
在过去的两个月里,我一直在努力解决这个问题。以下是我的发现:
1-是的,您可以将 Dropwizard 部署为 WAR 文件。您需要使用一些技巧,例如Wizard in a box或WizToWar
2-不!您不能在 AppEngine 标准环境中部署该 WAR 文件。
为什么?主要问题是 AppEngine 正在使用 servlet-api v2.5(已经有 10 多年的历史了!)并且没有升级到 servlet-api v3 或更高版本的计划。另一方面,Dropwizard 需要 servlet-api v3 或更高版本。
可是等等!还有另一种选择
您可以在App Engine 柔性环境中部署 Dropwizard
App Engine Flex 仍处于测试阶段,但我听说它将在 2017 年第一季度公开使用。如果您想现在使用它,您必须要求为您启用它。
您如何在 App Engine Flex 上进行部署?
-> 我已经将所有步骤都放在了博客文章中: 在 App Engine Flex 上部署 Dropwizard