大佬教程收集整理的这篇文章主要介绍了postgresql – 批处理插入时Slick 3.0中的数据库异常,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
org.POSTGResql.util.PsqlException: FATAL: sorry,too many clIEnts already
我的数据访问层看起来像:
val db: CustomPOSTGResDriver.BACkend.DatabaseDef = Database.forURL(url,user=user,password=password,driver= jdbcDriver) overrIDe def insertBatch(rowList: List[T#tableElementType]): Future[Long] = { val res = db.run(insertBatchquery(rowList)).map(_.head.tolong).recover{ case ex:Throwable=> RelationalRepositoryUtility.handleBatchOperationErrors(eX)} //db.close() res } overrIDe def insertBatchquery(rowList: List[T#tableElementType]): FixedsqlAction[Option[Int],NoStream,Write] = { query ++= (rowList) }
在插入批处理中关闭连接没有任何影响…它仍然给出相同的错误.
我从我的代码中调用插入批处理,如下所示:
val temp1 = List1.flatMap { li => Future.sequence(li.map { trip => val data = for { triPDAta <- TriPDAtaRepository.insertquery( trip.triPDAta) subTriPDAta <- SubTriPDAtaRepository.insertBatchquery(getupdatedSubTriPDAtaList(trip.subTriPDAta,triPDAta.ID)) } yIEld ((triPDAta,subTriPDAta)) val res=db.run(data.transactionally) res //db.close() }) }
如果我在我的工作后关闭连接,你可以在评论代码中看到我得到错误:
java.util.concurrent.RejectedExecutionException: Task slick.BACkend.DatabaseComponent$DatabaseDef$$anon$2@6c3ae2b6 rejected from java.util.concurrent.ThreadPoolExecutor@79d2d4eb[Terminated,pool size = 0,active threads = 0,queued tasks = 0,completed tasks = 1]
在调用没有Future.sequence的方法后,像这样:
val temp1 =List.map { trip => val data = for { triPDAta <- TriPDAtaRepository.insertquery( trip.triPDAta) subTriPDAta <- SubTriPDAtaRepository.insertBatchquery(getupdatedSubTriPDAtaList(trip.subTriPDAta,triPDAta.ID)) } yIEld ((triPDAta,subTriPDAta)) val res=db.run(data.transactionally) res }
我仍然有太多的客户错误…
这可以通过串行运行插入来解决,强制每个插入批处理依赖于前一个:
// Empty Future for the results. replace Unit with the correct type - whatever // "res" is below. val emptyFuture = Future.successful(Seq.emptY[Unit]) // This will only insert one at a time. You Could use List.slIDing to batch the // inserts if that was important. val temp1 = List.foldleft(emptyFuturE) { (prevIoUsFuture,trip) => prevIoUsFuture flatMap { prevIoUs => // Inner code copIEd from your example. val data = for { triPDAta <- TriPDAtaRepository.insertquery(trip.triPDAta) subTriPDAta <- SubTriPDAtaRepository.insertBatchquery(getupdatedSubTriPDAtaList(trip.subTriPDAta,triPDAta.ID)) } yIEld ((triPDAta,subTriPDAta)) val res = db.run(data.transactionally) prevIoUs :+ res } }
以上是大佬教程为你收集整理的postgresql – 批处理插入时Slick 3.0中的数据库异常全部内容,希望文章能够帮你解决postgresql – 批处理插入时Slick 3.0中的数据库异常所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。