【问题标题】:path parameter: Invalid path Scala Play Config file路径参数:无效的路径 Scala Play 配置文件
【发布时间】:2015-04-09 11:49:44
【问题描述】:

我的application.conf 文件中出现解析异常。

这是我的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.DbConfigWebUnitTest$$anonfun$1$$anonfun$apply$mcV$sp$3$$anon$3@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]   ...

【问题讨论】:

    标签: scala playframework playframework-2.0 playframework-2.3


    【解决方案1】:

    您正在将一个对象与一个字符串连接起来,这将调用生成your.class.name@hash 的默认toString 方法。您需要从 trait 调用方法:

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

    并对其他调用执行相同操作。

    或者您可以直接覆盖 toString 方法以返回限定符值并以与现在相同的方式使用它

    trait DbQualifier {
      val qualifier: String
      override def toString = qualifier
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-19
      • 1970-01-01
      • 1970-01-01
      • 2018-11-07
      • 2018-01-25
      • 1970-01-01
      相关资源
      最近更新 更多