在GAE服務器端,我能夠用這些代碼區分我的開發環境與任何已部署的生產環境。
創建一個接口和兩個類文件。
public interface MyConstants {
public String myConstant();
}
public class MyConstantsDev implements MyConstants {
public String myConstant() { return "xyzzy-dev"; };
}
public class MyConstantsProd implements MyConstants {
public String myConstant() { return "xyzzy-prod"; };
}
使用「user.dir」env var定義了一點Guice魔術綁定。 user.dir路徑中的最後一個目錄是唯一的Google App Engine應用程序標識符或您的根項目開發目錄。一旦你知道這一點,你可以確定使用哪一組常量。
public class MyServerModule extends com.google.inject.AbstractModule {
String appIdentifier = new File(System.getProperty("user.dir")).getName();
if (appIdentifier.equals("trunk")) {
// Load MyConstants-dev.properties
bind(MyConstants.class).to(MyConstantsDev.class).in(Singleton.class);
} else {
// Load MyConstants-prod.properties
bind(MyConstants.class).to(MyConstantsProd.class).in(Singleton.class);
}
}
這讓我注入開發/生產常量爲階級是這樣的:
public class MyDomainClass {
@Inject
public MyDomainClass(Logger logger, MyConstants const) {
logger.debug(const.myConstant());
};
}
你需要常量客戶端還是服務器端? – Fedearne 2009-11-09 13:37:53
這正是我最近苦苦掙扎的問題。 當我第一次寫這個問題時,我的印象是i18n.Constants在gwt(瀏覽器)和gae(服務器)上的工作方式都是一樣的。結果谷歌的i18n庫僅僅是瀏覽器端(不可移植到服務器)。 另外,Guin的Stage enum,與'付費書呆子'提出的解決方案一樣是可行的解決方案,在Gin中不被支持。 – Stevko 2009-11-13 05:08:54