Scala, Slick: слишком много клиентов уже - PullRequest
0 голосов
/ 23 ноября 2018

я сталкивался с этой проблемой:

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

Приложение работает, но я могу сделать только 3 или 4 запроса, и затем я получаю эту ошибку, так что происходящее (я предполагаю), я создаю новыйСоединения на запрос и идентификатор хотели бы сохранить одно соединение на жизненный цикл приложения, есть идеи, как изменить код для этого?

Попытка внедрения 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))
    })
  }
  }
...