我一直在使用eclipse插件构建一个GWT 1.7 + GAE应用程序。 系统常量被加载到MyConstants.properties文件中,该文件由扩展... gwt.i18n.client.Constants类的单例MyConstants类加载。
我希望MyConstants加载包含
等设置的多个文件中的一个我发现了Guice的Enum Stage的几个引用,但这似乎不受杜松子酒的支持。此外,它只处理dev / prod,我肯定需要本地/ beta / prod解决方案。
有没有办法使用命令行arg或其他实例定义的运行时参数来加载到GAE时才能工作?
答案 0 :(得分:3)
在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);
}
}
这允许我将dev / prod常量注入到这样的类中:
public class MyDomainClass {
@Inject
public MyDomainClass( Logger logger, MyConstants const ) {
logger.debug( const.myConstant() );
};
}
答案 1 :(得分:1)
您应该使用特制的类型安全界面来解决这个问题......
if (SystemProperty.environment.value() == SystemProperty.Environment.Value.Production)
{
//It's production.
}
else
{
//It's Dev - and (SystemProperty.environment.value() == SystemProperty.Environment.Value.Development)
}
答案 2 :(得分:0)
开发和部署环境之间的一个不同之处是SERVER_SOFTWARE
环境变量:
if (System.getenv("SERVER_SOFTWARE").startsWith("Dev")) {
// Load MyConstants-dev.properties
} else {
// Load MyConstants-prod.properties
}
也许你可以选择加载哪个Guice模块。
答案 3 :(得分:0)
关于获取GAE SERVER_SOFTWARE 变量的上述答案; SERVER_SOFTWARE环境变量是CGI默认值,因此它是Web服务器设置,无法通过系统环境变量访问,但可以从ServletContext中获取。
这里的代码可以为您提供所需的价值(不知道为什么它的ServerInfo而不是ServerSoftware ......):
if (getServletContext().getServerInfo().startsWith("Dev")) {
// Load MyConstants-dev.properties
} else {
// Load MyConstants-prod.properties
}