gpt4 book ai didi

java - 如何根据部署实例改变常量

转载 作者:行者123 更新时间:2023-11-30 07:38:38 25 4
gpt4 key购买 nike

我一直在使用 eclipse 插件构建 GWT 1.7 + GAE 应用程序。系统常量加载到 MyConstants.properties 文件中,该文件由扩展 ...gwt.i18n.client.Constants 类的单例 MyConstants 类加载。

我想让 MyConstants 加载包含如下设置的几个文件之一

  • MyConstants-local.properties
  • MyConstants-alpha.properties
  • MyConstants-beta.properties
  • MyConstants-prod.properties

我发现了几个对 Guice 的 Enum Stage 的引用,但这似乎不受 gin 的支持。此外,它只处理开发/生产,我绝对需要一个本地/测试版/生产解决方案。

有没有办法使用命令行 arg 或其他一些实例定义的运行时参数来执行此操作,这些运行时参数在加载到 GAE 时会起作用?

最佳答案

在 GAE 服务器端,我能够使用这些代码将我的开发环境与任何已部署的生产环境区分开来。

创建一个接口(interface)和两个类文件。

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 魔法绑定(bind)。 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);
}
}

这允许我像这样将开发/生产常量注入(inject)到类中:

public class MyDomainClass {

@Inject
public MyDomainClass( Logger logger, MyConstants const ) {
logger.debug( const.myConstant() );
};
}

关于java - 如何根据部署实例改变常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1682835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com