在 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”环境变量定义一点 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() );
};
}