我正在尝试使用Scala中的typesafe配置库读取配置文件,但我无法将conf文件放在我的资源文件夹中。
我的property/config
文件采用以下格式
region=dev
numlines=2
,文件名为property.txt
代码如下所示
import com.typesafe.config._
val propertyFile = args(2)
val myConfigFile = new File(propertyFile)
val fileConfig = ConfigFactory.parseFile(myConfigFile)
val config = ConfigFactory.load(fileConfig)
val environment = config.getString("region")
val numberOfLinesToBeRemoved = config.getInt("numlines")
答案 0 :(得分:1)
案例1 - 假设您有一个sbt项目,那么您的配置文件abc.conf
应该位于src/main/resources/abc.conf
。
现在假设文件abc.conf
包含以下内容。
region=dev
numlines=2
现在,您可以通过
访问这些配置import com.typesafe.config._
val confFileName = "abc"
val config = ConfigFactory.load(confFileName)
val environment = config.getString("region")
val numberOfLinesToBeRemoved = config.getInt("numlines")
案例2 - 如果您不能将conf文件作为资源包含在项目中,那么您可以使用conf文件路径作为java命令的参数。
import com.typesafe.config._
val config = ConfigFactory.load()
val environment = config.getString("region")
val numberOfLinesToBeRemoved = config.getInt("numlines")
现在,您必须在运行应用程序时传递配置文件路径,
java -jar your_jar.jar -Dconfig.file=path/to/config-file
案例3 - 您希望使用某些指定路径的配置
import com.typesafe.config._
import java.nio.file.Paths
// It should be absolute or full path
val confFilePath = "/home/your_username/something/abc.conf"
// just replace the above line by
// val confFilePath = args(2)
// and pass the full path as command line argument.
val confFile = Paths.get(confFilePath).toFile
val config = ConfigFactory.parseFile(confFile)
val environment = config.getString("region")
val numberOfLinesToBeRemoved = config.getInt("numlines")
答案 1 :(得分:0)
我们也可以通过在spark Submit命令中传递jar参数来传递和加载外部配置文件(无需将配置文件复制到jar资源文件夹中,而是需要在集群中的每个节点上复制相同路径)
1] Spark command:
spark/bin>spark-submit --class test.Example Test.jar -appconfig /home/folderpath/APP.conf
2] Example.scala:
import com.typesafe.config._
import java.nio.file.Paths
...........
def main(argument: Array[String]) {
var confPath = ""
var argumentIndex = 0
for (n <- 0 until argument.length) {
if (argument(n).equals("-appconfig")) {
argumentIndex = n + 1;
confPath = argument(argumentIndex)
}
}
val confFile = Paths.get(confPath).toFile
val appConf = ConfigFactory.parseFile(confFile)
name = appConf.getString("NAME")
println("name : "+name)
}