我正在使用
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使用System.getenv()获取API密钥,通常环境变量written in appengine-web.xml还有另一种方法吗?要从Google Developers Console设置环境变量,还是安全地存储并从GAE Datastore获取它们?
最佳答案 通常它是通过外部.properties文件(和
Properties类)完成的.假设您有一个用于演示开发,一个用于生产(通常还有第三个用于测试).因此,您可以将开发文件上传到Github,并为自己保留生产配置(也不要忘记将其添加到.gitignore中).
基本上你的资源文件夹中有3个文件:
> myapp.prod.properties
> myapp.dev.properties
> myapp.test.properties
(命名模式取决于您,它可能只是prod.properties,但在这种情况下,它可能与来自第三方lib的某些文件冲突).
有一个教程如何阅读这些文件: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 Web框架都可以自动为您完成.例如,在Spring中,查看Profiles,@ PropertySource和ConfigurableApplicationContext