确定是否在App Engine Runtime(Java)上运行代码是否运行
-
30-09-2019 - |
题
如何确定在Google App Engine运行时(Java)上运行的某些代码(Serv-LET还是简单类)是否可以决定是否使用App Engine的特定库?是否有一些可靠的运行时环境ID?
没有正确的解决方案
其他提示
您可以检查 com.google.appengine.runtime.version
财产:
String appEngineVersion = System.getProperty("com.google.appengine.runtime.version");
如果是设置的,则是应用引擎。
但是我会考虑使用单独的构建目标,以避免运行时开销。
类似于@reza写的东西,但有点清洁:
采用 SystemProperty.environment.value()
要得到 ”生产“在应用程序引擎上运行时”发展“在开发服务器中运行时。
正如@matthew Flaschen所说,您可以检查一些系统属性,以确定GAE是否存在。 这个链接 提供细节。
如果您走这条路线,则需要构建您的应用程序,以使主代码对GAE类没有静态依赖性;即没有导入或其他对代码中GAE软件包和类的引用(与字符串文字中的GAE类名相隔)。所有依赖项都必须隔离到使用的代码 Class.forName(String)
确定是否存在GAE之后。
这代表了一个非平凡的开销:
- 您可能最终会获得一个额外的适配器接口,并且(至少)为GAE和非GAE案例进行了两个实现。
- 您已经有(次要的)运行时开销,可以在启动时动态加载相关类,并通过适配器接口进行呼叫。
- 因此,您的罐子文件更大。
- 现在,您必须在两个平台上进行测试。
另一方面,您确实具有在GAE和非GAE环境中使用一个罐子的潜在优势。
如解释 这里 您可以检查以下属性:
String environment = System.getProperty(
"com.google.appengine.runtime.environment")
environment
在开发服务器中运行时,在应用程序引擎上运行时是“生产”。
我在这里没有看到类型安全的解决方案,所以这里是:
if (SystemProperty.environment.value() == SystemProperty.Environment.Value.Production) {
// The app is running on App Engine...
}
还有另一种方法可以做到这一点。这在GAEVFS的文档中很好地解释了如何编写便携式代码: http://code.google.com/p/gaevfs/wiki/applicationportability
您感兴趣的是以下行:
boolean isGoogleAppEngine = getServletContext().getServerInfo().contains( "Google" );
不隶属于 StackOverflow