在Scala源代码中隐藏变量

时间:2015-12-22 18:03:28

标签: scala

在我的scala应用程序中,我们正在与AWS进行交互。这是一个内部公司项目,但我们仍然需要隐藏2个参数,这是一个密钥和访问密钥。我们的代码存在于github上,所以我不确定是否有任何可行的方法在scala中执行它?或者我们是否需要将它们作为scala应用程序选择的服务器上的导出参数?如果是这样的话我该怎么做?

val hadoopConf=sc.hadoopConfiguration;
hadoopConf.set("fs.s3.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem")
hadoopConf.set("fs.s3.awsAccessKeyId",myAccessKey)
hadoopConf.set("fs.s3.awsSecretAccessKey",mySecretKey)

编辑: 我们在不在EC2上的redhat物理服务器上运行此应用程序。因为它似乎不是关于scala,所以有人能指出我的方向来帮助解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

一种方法是使用environement variables注入这两个值。

使用例如typesafe confighttps://github.com/typesafehub/config

可以轻松实现

因此,您创建了一个application.conf文件:

AWS {
  accessKey = {$AWS_ACCESS_KEY} // env variable AWS_ACCESS_KEY
  secret = {$AWS_SECRET} // env variable AWS_SECRET
}

要在您的应用程序中使用它,您可以通过这种方式访问​​值:

import com.typesafe.config.ConfigFactory

conf = ConfigFactory.load()
val awsAccessKey = conf getString "AWS.accessKey"
val awsSecret = conf getString "AWS.secret"

一个很好的特性是,当未设置所需的env变量时,代码将抛出运行时异常。