在scala的開發過程中,經常會修改程序的參數,將這些參數放到配置文件中避免了重復編譯,然而打包的過程,如果不做配置文件外置,將無法修改配置內容,還是需要重新打包
這里給出讀取配置文件的三種方式
方式一:
這是最常見的讀取配置文件方式
val postgprop = new Properties() val ipstream: InputStream = this.getClass().getResourceAsStream("/config.properties") postgprop.load(ipstream)
在程序的任何地方輸入代碼,就能使通過下面的方式獲得key對應的value
postgprop.getProperty("key.name")
而配置文件的格式為
key.name=value
然而這種方式固定從src/main/resources獲取配置文件,打包時一並放入jar包中,修改較為麻煩
方式二:
通過 System.getProperty("user.dir") 的方式獲得當前路徑的絕對路徑,打成jar包運行時,一般就是java -jar或submit命令運行時的路徑,后面加上配置文件的路徑,如下
val filePath =System.getProperty("user.dir")//設定為jar包的絕對路徑 在IDE中運行時為project的絕對路徑 val postgprop = new Properties val ipstream = new BufferedInputStream(new FileInputStream(filePath+"/conf/config.properties")) postgprop.load(ipstream)
這樣就能在jar包范圍之外讀取配置文件了,但是,System.getProperty("user.dir")的方式較為固定,只能獲取當前路徑
方式三:
作為對方式二的改良,只需將獲取路徑的方式改變即可
val directory = new File("..") val filePath = directory.getAbsolutePath //設定為上級文件夾 獲取絕對路徑
“."就表示當前的文件夾,而”..“則表示當前文件夾的上一級文件夾
這樣就能靈活的設置路徑,而不像方式二,config的路徑必須是執行命令路徑
總結:
總的來說,提供了三種循序漸進的讀取配置文件的方式,其中方式二和方式三均能在jar包范圍之外讀取配置文件,避免了重復編譯,打包的過程
而方式一只能使用相對路徑,配置文件固定在src/main/resources中
特別注意:
特別要注意的是,在處理log4j的配置文件log4j.properties時有一些不同
val directory = new File("..") val filePath = directory.getAbsolutePath //設定為上級文件夾 獲取絕對路徑 PropertyConfigurator.configure(filePath + "/conf/log4j.properties")
filePath的設置可以自己選用后兩種方式的哪一種,但是一定要是絕對路徑