2015-02-09 103 views
0

我收到了我的application.conf文件內部的解析異常。路徑參數:路徑無效Scala播放配置文件

這裏是我的application.conf

db.test.driver = org.postgresql.Driver 
db.test.user = "postgres" 
db.test.password = "postgres" 
db.test.url = "jdbc:postgresql://localhost:5432/gasguru" 

這裏是我試圖使用從我application.conf

trait DbConfigWeb extends DbConfig { qualifier: DbQualifier => 

    def url: String = current.configuration.getString(qualifier + ".url").get 
    println(url) 
    def username: String = current.configuration.getString(qualifier + ".user").get 
    def password: String = current.configuration.getString(qualifier + ".password").get 
    def driver: String = current.configuration.getString(qualifier + ".driver").get 
    override def database: DatabaseDef = JdbcBackend.Database.forURL(url, username, password, null, driver) 

    override implicit val session = database createSession 
} 

trait DbQualifier { 
    val qualifier: String 
} 

trait DbProductionQualifier extends DbQualifier { 
    override val qualifier = "db.production" 
} 

trait DbTestQualifier extends DbQualifier { 
    override val qualifier = "db.test" 
} 

這裏閱讀代碼我試圖運行測試用例:

class DbConfigWebUnitTest extends PlaySpec with OneAppPerSuite with BeforeAndAfterAll { 


     "DbConfigWebTest" must { 
     "have the same username as what is defined in application.conf" in { 
      val dbManagementWeb = new DbConfigWeb with DbTestQualifier 
      dbManagementWeb.username must be("postgres") 
     } 

     "have the same password as what is defined in application.conf" in { 
      val dbManagementWeb = new DbConfigWeb with DbTestQualifier 
      dbManagementWeb.username must be("postgres") 
     } 


     "have the qualifier db.test" in { 
      val dbManagementWeb = new DbConfigWeb with DbTestQualifier 
      dbManagementWeb.qualifier must be ("db.test") 
     } 
     } 


    } 

最後錯誤信息:

[info] - must have the qualifier db.test *** FAILED *** 
[info] com.typesafe.config.ConfigException$BadPath: path parameter: Invalid path 'com.suredbits.web.db[email protected]1e2cbe08.url': Token not allowed in path expression: '$' ('$' not followed by {, '$' not allowed after '$') (you can double-quote this token if you really want it here) 
[info] at com.typesafe.config.impl.Parser.parsePathExpression(Parser.java:1095) 
[info] at com.typesafe.config.impl.Parser.parsePath(Parser.java:1135) 
[info] at com.typesafe.config.impl.Path.newPath(Path.java:224) 
[info] at com.typesafe.config.impl.SimpleConfig.hasPath(SimpleConfig.java:80) 
[info] at play.api.Configuration.reportError(Configuration.scala:743) 
[info] at play.api.Configuration.readValue(Configuration.scala:132) 
[info] at play.api.Configuration.getString(Configuration.scala:151) 
[info] at com.suredbits.web.db.DbConfigWeb$class.url(DbConfigWebProduction.scala:14) 
[info] at com.suredbits.web.db.DbConfigWebUnitTest$$anonfun$1$$anonfun$apply$mcV$sp$3$$anon$3.url(DbConfigWebUnitTest.scala:27) 
[info] at com.suredbits.web.db.DbConfigWeb$class.$init$(DbConfigWebProduction.scala:15) 
[info] ... 

回答

2

您將一個對象與一個字符串連接起來,該字符串將調用產生[email protected]的默認toString方法。您需要從特徵中調用方法:

current.configuration.getString(qualifier.qualifier + ".url").get 

並且在其他調用上也執行相同的操作。

或者你可以重寫toString方法返回預選賽值,並使用它,你正在使用它現在

trait DbQualifier { 
    val qualifier: String 
    override def toString = qualifier 
} 
以同樣的方式