大佬教程收集整理的这篇文章主要介绍了使用Slick执行并发查询时,postgresql – NullPointerException异常,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我的简化代码.我正在创建多个演员,它们将从数据库中调用相同的方法进行查询.
package com.app.repo import java.sql.timestamp import akka.actor.{Actor,ActorSystem,Props} import slick.driver.POSTGResDriver import slick.driver.POSTGResDriver.API._ import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration.FiniteDuration import scala.util.{Failure,success} case class SampleData(ID: Long,name: String,createDate: java.sql.timestamp) object tables extends { val profile = POSTGResDriver } with tables Trait tables { val profile: POSTGResDriver import profile.API._ class SampleDatatable(_tableTag: Tag) extends table[SampleData](_tableTag,Some("processing"),"SampleData") { def * = (ID,name,createDatE) <>(SampleData.tupled,SampleData.unapply) def ? = (Rep.some(ID),Rep.some(Name),Rep.some(createDatE)).shaped.<>({ r => import r._; _1.map(_ => SampleData.tupled((_1.get,_2.get,_3.get))) },(_: Any) => throw new Exception("InserTing into ? projection not supported.")) val ID: Rep[Long] = column[Long]("SamplEID",O.autoInc,O.PrimaryKey) val name: Rep[String] = column[String]("name") val createDate: Rep[java.sql.timestamp] = column[java.sql.timestamp]("CreateDate") } lazy val sampleDatatable = new tablequery(tag => new SampleDatatable(tag)) } class SamplequeryingActor(delay: FiniteDuration,duration: FiniteDuration) extends Actor { import scala.concurrent.duration._ overrIDe def preStart() = { context.system.scheduler.schedule(0.second,duration,self,"tick") } overrIDe def receive: Receive = { case "tick" => { println("tick received.. ") //val range = 1 until 1000 RepositoryImpl.reader.onComplete({ case success(r) => println(s"got sum as ${r.getorElse(0)}") case Failure(eX) => ex.printstacktrace() }) } } } object DriverHelper { val user = "POSTGRes" val url = "jdbc:POSTGResql://192.168.1.50:5432/MyDatabase" val password = "password" val jdbcDriver = "org.POSTGResql.Driver" val db: POSTGResDriver.BACkend.DatabaseDef = Database.forURL(url,user = user,password = password,driver = jdbcDriver) } object RepositoryImpl { val db: POSTGResDriver.BACkend.DatabaseDef = DriverHelper.db val Now = new timestamp(System.currentTimeMillis()) def reader = { db.run(tables.sampleDatatable.filter(_.createDate > Now).map(_.ID).sum.result) } def insertBatchRecords(List: List[SampleData]) = { db.run(tables.sampleDatatable ++= List) } } object PGConnectionTester extends App { import scala.concurrent.duration._ val sys = ActorSystem("sys") sys.actorOf(Props(classOf[SamplequeryingActor],1.seconds,10.seconds)) sys.actorOf(Props(classOf[SamplequeryingActor],10.seconds)) }
当我执行上面的代码,我得到如下错误:
java.lang.NullPointerException at slick.jdbc.DriverDatasource.getConnection(DriverDatasource.scala:98) at slick.jdbc.DatasourceJdbcdatasource.createConnection(Jdbcdatasource.scala:64) at slick.jdbc.JdbcBACkend$BaseSession.conn$lzycompute(JdbcBACkend.scala:415) at slick.jdbc.JdbcBACkend$BaseSession.conn(JdbcBACkend.scala:414) at slick.jdbc.JdbcBACkend$SessionDef$class.prepareStatement(JdbcBACkend.scala:297) at slick.jdbc.JdbcBACkend$BaseSession.prepareStatement(JdbcBACkend.scala:407) at slick.jdbc.StatemenTinvoker.results(StatemenTinvoker.scala:33) at slick.jdbc.StatemenTinvoker.iteratorTo(StatemenTinvoker.scala:22) at slick.jdbc.Invoker$class.first(Invoker.scala:31) at slick.jdbc.StatemenTinvoker.first(StatemenTinvoker.scala:16) at slick.driver.JdbcActionComponent$queryActionExtensionMethodsImpl$$anon$3.run(JdbcActionComponent.scala:228) at slick.driver.JdbcActionComponent$SimpleJdbcDriverAction.run(JdbcActionComponent.scala:32) at slick.driver.JdbcActionComponent$SimpleJdbcDriverAction.run(JdbcActionComponent.scala:29) at slick.BACkend.DatabaseComponent$DatabaseDef$$anon$2.liftedTree1$1(DatabaseComponent.scala:237) at slick.BACkend.DatabaseComponent$DatabaseDef$$anon$2.run(DatabaseComponent.scala:237) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)
演员将每10秒调用相同的方法.但是,我第一次收到这个错误.之后,查询正确执行.我不明白为什么会发生这种情况.在这个示例中,只有一些简单的读操作.但是在我的实际情况下,由于查询失败,有些数据在没有正确处理的情况下会丢失.
这个错误与连接池有关吗?
object DriverHelper { val user = "POSTGRes" val url = "jdbc:POSTGResql://192.168.1.50:5432/MyDatabase" val password = "password" val jdbcDriver = "org.POSTGResql.Driver" lazy val db: POSTGResDriver.BACkend.DatabaseDef = Database.forURL(url,driver = jdbcDriver) }
以上是大佬教程为你收集整理的使用Slick执行并发查询时,postgresql – NullPointerException异常全部内容,希望文章能够帮你解决使用Slick执行并发查询时,postgresql – NullPointerException异常所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。