2015-09-14 86 views
2

這是一個新手問題,我讀了很多,但我有點困惑。scala-錯誤加載一個屬性文件包裝在罐子裏

我從一個Jar中傳遞一個屬性文件,配置被讀取,一切正常。

我想添加一個try catch。我試過這個,但它不起作用,因爲如果屬性文件不存在,加載不會產生異常。因此有3個問題:

  • 加載這樣的文件是否正確?
  • 因爲config在jar裏面,所以放一個try/catch是否合理?
  • 如果是這樣,有什麼建議如何?

    var appProps : Config = ConfigFactory.load() 
    try { 
        appProps = ConfigFactory.load("application.properties") 
    } catch { 
        case e: Exception => { 
        log.error("application.properties file not found") 
        sc.stop() 
        System.exit(1) 
        } 
    } 
    

回答

3

您的代碼看起來確定一般。

ConfigFactory.load("resource.config")將處理缺少的資源,如空資源。結果你得到一個空的Config。所以,一個try-catch-block並沒有什麼意義。

你通常會指定一個回退配置是這樣的:

val appProps = ConfigFactory.load(
    "application.properties" 
).withFallBack(
    ConfigFactory.load() 
) 

編輯:

你得到一個空Config

句子

結果

有點不完整。 ConfigFactory.load(resourceBaseName: String)應用defaultReference()和defaultOverrides()。所以你的結果Config對象可能包含一些通用的環境數據,而不是空的。

據我所看到的,要檢查你的最佳選擇,如果資源是存在的,發出錯誤信息,如果沒有,查找自己的資源:

val configFile = "application.properties" 
    val config = Option(getClass.getClassLoader.getResource(configFile)).fold { 
    println(s"Config not found!") 
    ConfigFactory.load() 
    } { resource => 
    ConfigFactory.load(configFile) 
    } 
+0

謝謝您的回答。只是一個問題:像這樣如果application.properties沒有找到一個空的配置將被加載,是否正確?如果是這樣,我該如何測試它是否屬實並記錄下來?因爲我試過如果(appProps.isEmpty)但它不起作用 – Irene

+1

@Irene我更新了我的答案。注意:不需要使用'/'來啓動資源文件,所以我從答案中刪除了該文件。 –

相關問題