我正在用Java在GAE上开发一个web应用程序,我将在Github上打开这个web应用程序的代码。
但是,我不喜欢在代码中公开一些API密钥。因此,我正在寻找一种方法来存储应用程序可以获得的一些数据,而不需要在Github上发布的工作应用程序代码中显示这些数据。
例如,这个servlet https://github.com/GoogleCloudPlatform/java-docs-samples/blob/master/appengine/mailgun/src/main/java/com/example/appengine/mailgun/MailgunServlet.java使用系统.getenv()获取API密钥,并且通常使用环境变量用appEnge-web.xml编写,还有其他方法吗?要从Google开发人员控制台设置环境变量,还是安全地存储并从GAE Datastore获取它们?
发布于 2016-04-12 03:29:11
通常是通过外部.properties
文件(和属性类)完成的。假设您有一个用于演示开发,另一个用于生产(也通常有第三个,用于测试)。这样,您就可以将开发文件上传到Github中,并为自己保留生产配置(也不要忘记将其添加到.gitignore
中)。
基本上,您的resources
文件夹中将有3个文件:
myapp.prod.properties
myapp.dev.properties
myapp.test.properties
(命名模式取决于您,它可能只是prod.properties
,但在这种情况下,它可能与第三方库中的某个文件发生冲突)。
有一个教程,如何读取这样的文件:https://docs.oracle.com/javase/tutorial/essential/environment/properties.html和JavaDoc https://docs.oracle.com/javase/8/docs/api/java/util/Properties.html
你需要这样的东西:
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框架都可以自动为您完成这一任务。例如,在Spring中,看看Profiles、@PropertySource
和ConfigurableApplicationContext
https://stackoverflow.com/questions/36571579
复制