2010-11-10 90 views
7

如何確定某些代碼(serv-let或簡單類)是否在Google App Engine運行時(Java)上運行,以便人們可以決定是否利用應用程序引擎的特定庫或不?有沒有一些可靠的運行環境ID?確定應用程序引擎運行時(Java)上是否運行代碼

+0

的可能的複製[如何在Java應用程序引擎檢查,如果我們開發工作站上(http://stackoverflow.com/問題/ 1574637 /如何在java-app-engine-in-check-in-java-app-engine-if-we-are-development-workstation) – 2016-05-09 01:28:25

回答

4

您可以檢查com.google.appengine.runtime.version屬性:如果設置

String appEngineVersion = System.getProperty("com.google.appengine.runtime.version"); 

,它的App Engine。

但我會考慮使用單獨的構建目標,以避免運行時開銷。

+1

非常感謝你的回答。對於這兩種情況,我有兩個獨立的實現子類,並且它們非常小(兩行代碼總共200行)需要單獨構建。 – nsegae 2010-11-10 02:57:51

1

正如@Matthew Flaschen所說,您可以檢查系統屬性以確定GAE是否存在。 This link給出了細節。

如果沿着這條路線走下去,就需要構建應用程序,以便主代碼對GAE類沒有靜態依賴;即代碼中沒有對GAE包和類的引用或其他引用(除了GAE類名稱等字符串文字)。必須將所有依賴關係隔離到使用Class.forName(String)後加載的代碼確定GAE是否存在。

這代表了不平凡的開銷:

  • 你可能有一個額外的適配器接口落得和(至少)兩種實現了GAE和非GAE的情況。
  • 您已經在啓動時動態加載相關類並通過Adapter接口調用了(較小)運行時開銷。
  • 您的JAR文件的結果要大得多。
  • 您現在必須在兩個平臺上進行測試。

另一方面,您確實有一個可以在GAE和非GAE環境下工作的JAR的潛在優勢。

1

正如所解釋的here您可以檢查以下屬性:

String environment = System.getProperty(
    "com.google.appengine.runtime.environment") 

environment在App Engine上運行時爲「生產」,在開發服務器上運行時爲「開發」。

2

類似於@Reza寫的,但有點清潔:

使用SystemProperty.environment.value()得到「生產」在App Engine,而「發展」運行時,在開發服務器中運行時。

1

我看不出有什麼類型安全的解決方案在這裏所以在這裏,它是:

if (SystemProperty.environment.value() == SystemProperty.Environment.Value.Production) { 
    // The app is running on App Engine... 
} 
相關問題