如何识别某些代码(serv-let或简单类)是否在Google App Engine运行时(Java)上运行,以便可以决定是否使用应用引擎的特定库?那是否有一些可靠的运行时环境ID?
答案 0 :(得分:4)
您可以查看com.google.appengine.runtime.version
属性:
String appEngineVersion = System.getProperty("com.google.appengine.runtime.version");
如果已设置,则为App Engine。
但我会考虑使用单独的构建目标,以避免运行时开销。
答案 1 :(得分:2)
类似于@Reza写的,但有点清洁:
在App Engine上运行时使用SystemProperty.environment.value()
获取“生产”,在开发服务器中运行时使用“开发”。
答案 2 :(得分:1)
正如@Matthew Flaschen所说,您可以检查系统属性以确定GAE是否存在。 This link提供了详细信息。
如果沿着这条路走下去,你的应用程序需要构建,以便主代码对GAE类没有静态依赖;即代码中没有对GAE包和类的导入或其他引用(在字符串文字中除了GAE类名等)。在您确定GAE是否存在之后,必须将所有依赖关系与使用Class.forName(String)
加载的代码隔离开来。
这代表了一个非平凡的开销:
另一方面,你确实有一个可以在GAE和非GAE环境下工作的JAR的潜在优势。
答案 3 :(得分:1)
正如here所述,您可以查看以下属性:
String environment = System.getProperty(
"com.google.appengine.runtime.environment")
environment
在App Engine上运行时为“Production”,在开发服务器中运行时为“Development”。
答案 4 :(得分:1)
我在这里看不到任何类型安全的解决方案,所以这里是:
if (SystemProperty.environment.value() == SystemProperty.Environment.Value.Production) {
// The app is running on App Engine...
}
答案 5 :(得分:0)
还有另一种方法可以做到这一点。这在gaevfs关于如何编写可移植代码的文档中得到了很好的解释:http://code.google.com/p/gaevfs/wiki/ApplicationPortability
您感兴趣的是以下一行:
boolean isGoogleAppEngine = getServletContext().getServerInfo().contains( "Google" );