Scala,Slick:已经有太多客户

时间:2018-11-22 22:59:38

标签: scala connection client slick

我遇到了这个问题:

Caused by: org.postgresql.util.PSQLException: FATAL: sorry, too many clients already

该应用程序正常运行,但是我只能发出3或4个请求,然后我收到此错误,因此,发生的事情(即猜测)是为每个请求和ID创建新的连接,例如每个应用程序生命周期保持一个连接知道如何修改代码吗?

试图将UsersDao注入到我的控制器中,而不是将其用作对象,但这没有任何改变

我对Scala真的很陌生,因此可以得到任何帮助

import config.DatabaseConfig
import domain.{User, UsersTable}
import slick.jdbc.PostgresProfile.api._
import slick.sql.SqlAction

import scala.concurrent.Future
trait BaseDao extends DatabaseConfig {

  val usersTable = TableQuery[UsersTable]


  protected implicit def executeFromDb[A](action: SqlAction[A, NoStream, _ <: slick.dbio.Effect]): Future[A] = {
    println(db)
    db.run(action)
  }

}
object UsersDao extends BaseDao {

  def findAll: Future[Seq[User]] = usersTable.result

  def create(user: User): Future[Long] = usersTable.returning(usersTable.map(_.id)) += user

  def findByFirstName(firstName: String): Future[Seq[User]] = usersTable.filter(_.firstName === firstName).result

  def findById(userId: Long): Future[User] = usersTable.filter(_.id === userId).result.head

  def delete(userId: Long): Future[Int] = usersTable.filter(_.id === userId).delete

}

DatabaseConfig

trait DatabaseConfig extends Config {

  val driver = slick.jdbc.PostgresProfile

  import driver.api._

  def db = Database.forConfig("dbname")
  implicit val session: Session = db.createSession()
}

控制器

import domain.User
import javax.inject.{Inject, Singleton}
import play.api.libs.json.Json
import play.api.mvc._
import repository.UsersDao

import scala.concurrent.{ExecutionContext, Future}

@Singleton
class UserController @Inject() ()(cc: ControllerComponents, parsers: PlayBodyParsers)(implicit exec: ExecutionContext) extends AbstractController(cc) {
  def addUser = Action.async(parse.json[User]) { req => {
    UsersDao.create(req.body).map({ user =>
      Ok(Json.toJson(user))
    })
  }
  }

0 个答案:

没有答案