如何使用Java在GAE中设置环境变量-不在主代码中公开?或者以其他方式隐藏应用程序使用的键?
我正在用Java在GAE上开发一个web应用程序,我将在Github上打开这个web应用程序的代码 但是,我不喜欢在代码中公开一些API键。因此,我正在寻找一种方法来存储应用程序可以获得的一些数据,而不必在Github上发布的工作应用程序代码中显示这些数据如何使用Java在GAE中设置环境变量-不在主代码中公开?或者以其他方式隐藏应用程序使用的键?,java,google-app-engine,Java,Google App Engine,我正在用Java在GAE上开发一个web应用程序,我将在Github上打开这个web应用程序的代码 但是,我不喜欢在代码中公开一些API键。因此,我正在寻找一种方法来存储应用程序可以获得的一些数据,而不必在Github上发布的工作应用程序代码中显示这些数据 例如,这个servlet使用.getenv()和通常的环境变量获取API密钥,还有其他方法吗?从Google开发者控制台设置环境变量,或者安全地存储并从GAE数据存储中获取环境变量 通常通过外部.properties文件(和类)完成。假设您有
例如,这个servlet使用.getenv()和通常的环境变量获取API密钥,还有其他方法吗?从Google开发者控制台设置环境变量,或者安全地存储并从GAE数据存储中获取环境变量 通常通过外部
.properties
文件(和类)完成。假设您有一个用于演示开发,一个用于生产(第三个用于测试也是很常见的)。所以您可以将开发文件上传到Github中,并为自己保留生产配置(也不要忘记将其添加到.gitignore
)
基本上,您的resources
文件夹中将有3个文件:
myapp.prod.properties
myapp.dev.properties
myapp.test.properties
prod.properties
,但在这种情况下,它可能与第三方库中的某些文件冲突)
有一个关于如何读取这些文件的教程:和JavaDoc
你需要像这样的东西:
Properties props = new Properties();
String name;
if (SystemProperty.Environment.Value.Development == SystemProperty.environment.value()) {
name = "myapp.dev.properties";
} else {
name = "myapp.prod.properties";
}
props.load(Classname.class.getClassLoader().getResourceAsStream(name));
大多数Java web框架都可以自动为您做到这一点。例如,在Spring中,请查看配置文件、@PropertySource
和ConfigurableApplicationContext