【问题标题】:playframework connection closed while using both slick and anorm使用 slick 和 anorm 时,playframework 连接关闭
【发布时间】:2014-01-02 07:19:54
【问题描述】:

我有一个项目同时使用 slick 和 anorm。

I define a method for slick 

  object DBCache {
    def apply(app: play.api.Application) = Cache.getOrElse[Database](app.hashCode.toString){
      Database.forDataSource(PlayDB.getDataSource("default")(app))
    }
  }

  private[persist] def inSession[T](block: Session => T) = DBCache(current).withSession(block(_))

当我可以批量插入方法时使用异常

def batchInsert(customerAccounts: Seq[Customer]) = DB.withConnection { implicit conn =>
      val sql = SQL(insertSql)
      val batch = customerAccounts.foldLeft(sql.asBatch) {
        (sql, c) => sql.addbatch(xxx)
      }
}

它报告

play.api.Application$$anon$1: 执行异常[[MySQLNonTransientConnectionException: 连接关闭后不允许任何操作。]

如何避免这个错误

【问题讨论】:

标签: scala playframework slick anorm


【解决方案1】:

我发现 playframework 的 master 分支禁用了跟踪, datasource.setDisableConnectionTracking( conf.getBoolean("disableConnectionTracking").getOrElse(true))

所以我在Global.scala 中禁用它。

还有一些问题。发生sql错误时,可能会关闭连接。然后我转而使用阿里巴巴的数据源https://github.com/alibaba/druid。效果很好!

【讨论】:

  • 我转向druid阿里巴巴使用的数据源。效果很好!
猜你喜欢
  • 1970-01-01
  • 2013-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多